2011-09-09 14 views
18

Próbuję zmienić moją czcionkę (kolor i rozmiar) i tło na moim ListView. Chcę to zmienić za pomocą linii kodu nie w formacie xml. mój widok listy wygląda następująco: xml:Jak zmienić kolor i czcionkę na liście ListView

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dp" 
android:textSize="18sp" android:text="@string/hello"> 
</TextView> 

i mój kod jest

public class NewsActivity extends ListActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

// ArrayAdapter listItemAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, v_itemList); 

     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,ynetList)); 

     View v=getListView() ; 

     ListView lv = getListView(); 

co dalej? proszę dać mi przykład bazę na mojego kodu

+0

Czy próbujesz ustawić kolor i rozmiar podczas tworzenia listy? Lub zrobić to dla konkretnego dziecka po utworzeniu listy? – blessenm

+0

Chcę zmienić kolor i rozmiar, zanim zostaną one utworzone. I \t int childCount = lv.getChildCount(); ale uzyskaj 0.how to naprawić –

Odpowiedz

30

musisz utworzyć CustomListAdapter.

public class CustomListAdapter extends ArrayAdapter <String> { 

    private Context mContext; 
    private int id; 
    private List <String>items ; 

    public CustomListAdapter(Context context, int textViewResourceId , List<String> list) 
    { 
     super(context, textViewResourceId, list);   
     mContext = context; 
     id = textViewResourceId; 
     items = list ; 
    } 

    @Override 
    public View getView(int position, View v, ViewGroup parent) 
    { 
     View mView = v ; 
     if(mView == null){ 
      LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      mView = vi.inflate(id, null); 
     } 

     TextView text = (TextView) mView.findViewById(R.id.textView); 

     if(items.get(position) != null) 
     { 
      text.setTextColor(Color.WHITE); 
      text.setText(items.get(position)); 
      text.setBackgroundColor(Color.RED); 
      int color = Color.argb(200, 255, 64, 64); 
       text.setBackgroundColor(color); 

     } 

     return mView; 
    } 

} 

Element lista wygląda następująco (custom_list.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView" 
    android:textSize="20px" android:paddingTop="10dip" android:paddingBottom="10dip"/> 
</LinearLayout> 

Użyj TextView API ozdobić swój tekst do własnych upodobań

i będzie go używać jak to

listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList); 
mListView.setAdapter(listAdapter); 
+0

wielkie dzięki! –

+0

Próbowałem kodu, który podałeś tutaj ... Działa dobrze ... Jedna rzecz, którą chcę dostosować to to, że pozycja jest równa 0, to muszę zmienić kolor tylko dla tego widoku tekstowego. zadziałało, ale jeśli przewijam sugestie, zmienia się również inny kolor widoku tekstowego. Co mogę zrobić, aby ustawić tylko kolor tekstu, który znajduje się na pozycji 1? – Pratik

+1

Dodanie generycznych do tego adaptera jest znacznie lepsze –

0

Można wybrać dziecku jak

TextView tv = (TextView)lv.getChildAt(0); 
tv.setTextColor(Color.RED); 
tv.setTextSize(12);  
+2

próbowałem tego, ale otrzymałem null w tv = (TextView) lv.getChildAt (i); –

0

używać ich w kodzie Java w ten sposób:

color = getResources().getColor(R.color.mycolor); 

Sposób getResources() zwraca klasę ResourceManager dla bieżącej działalności, a getColor() pyta kierownik patrzeć kolor podany identyfikator zasobu

7

Tworzenie CustomAdapter i że masz getView(), więc jeśli aby zmienić kolor tła ListView użyć tego:

v.setBackgroundColor(Color.CYAN); 

Jeśli chcesz zmienić textColor następnie to zrobić:

tv.setTextColor(Color.RED); 

i dla TEXTSIZE:

tv.setTextSize(20); 

gdzie „v” jest ListView i „tv” jest TextView

1

Jesli chcesz ustawić tło na liście, a następnie umieścić obraz przed < TextView >

< ImageView 
android:background="@drawable/image_name" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"/> 

i jeśli u chcą zmienić kolor a następnie umieścić kod koloru na powyższym polu tekstowym tak

android:textColor="#ffffff" 
1

Jeśli wystarczy zmienić niektóre parametry View i domyślnego zachowania ArrayAdapter jego OK dla Ciebie:

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 

public class CustomArrayAdapter<T> extends ArrayAdapter<T> { 

    public CustomArrayAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

      // Here all your customization on the View 
      view.setBackgroundColor(.......); 
      ... 

     return view; 
    } 


} 
3

Jeszcze lepiej, nie trzeba tworzyć osobnego android układ XML dla widoku listy komórek. Możesz użyć "android.R.layout.simple_list_item_1", ​​jeśli lista zawiera tylko tekst.

private class ExampleAdapter extends ArrayAdapter<String>{ 

    public ExampleAdapter(Context context, int textViewResourceId, String[] objects) { 
     super(context, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     View view = super.getView(position, convertView, parent); 

     TextView tv = (TextView) view.findViewById(android.R.id.text1); 
     tv.setTextColor(0); 

     return view; 
    } 
1

Jeśli chcesz użyć koloru z colors.xml, eksperymentalnych :

public View getView(int position, View convertView, ViewGroup parent) { 
     ... 
     View rowView = inflater.inflate(this.rowLayoutID, parent, false); 
     rowView.setBackgroundColor(rowView.getResources().getColor(R.color.my_bg_color)); 
     TextView title = (TextView) rowView.findViewById(R.id.txtRowTitle); 
     title.setTextColor(
      rowView.getResources().getColor(R.color.my_title_color)); 
     ... 
    } 

Można użyć też:

private static final int bgColor = 0xAAAAFFFF; 
public View getView(int position, View convertView, ViewGroup parent) { 
     ... 
     View rowView = inflater.inflate(this.rowLayoutID, parent, false); 
      rowView.setBackgroundColor(bgColor); 
... 
} 
0

w android 6.0 można zmienić kolor tekstu, jak poniżej:

holder._linear_text_active_release_pass.setBackgroundColor(ContextCompat.getColor(context, R.color.green)); 
Powiązane problemy