2011-09-09 18 views
18

Estoy tratando de cambiar mi fuente (color y tamaño) y la parte trasera de mi ListView. Quiero cambiarlo con líneas de código no en xml. mi lista vista parece: el xml:Cómo cambiar el color y la fuente en 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> 

y mi código es

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(); 

lo que sigue? por favor, dame una base de ejemplo en mi código

+0

¿Está tratando de establecer el color y el tamaño mientras se crea la lista? ¿O hacerlo a un niño particular después de que se crea la lista? – blessenm

+0

Quiero cambiar el color y el tamaño antes de que se creen. I \t int childCount = lv.getChildCount(); pero obtenga 0.cómo solucionarlo –

Respuesta

30

Es necesario crear un 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; 
    } 

} 

El elemento de la lista se parece a esto (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> 

el uso de la API de Vista de Texto para decorar su texto a su gusto

y usted va a utilizar como esto

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

muchas gracias !!!! –

+0

Probé el código que ha dado aquí ... Funciona bien ... Una cosa que quiero personalizar es que si la posición es igual a 0, entonces necesito cambiar el color solo para esa vista de texto. funcionó, pero si desplazo las sugerencias, también se cambia el color de otra vista de texto. ¿Qué puedo hacer para establecer solo el color de la vista de texto que está en la posición 1? – Pratik

+1

Si agrega genéricos a este adaptador, es mucho mejor –

0

Puede seleccionar un niño como

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

intenté esto pero obteniendo null en tv = (TextView) lv.getChildAt (i); –

0

utilizarlos en código Java como esto:

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

El método getResources() devuelve la clase ResourceManager para la actividad actual, y getColor() pregunta el gerente para buscar un color dado un identificador de recursos

7

Crear una CustomAdapter y en que tiene la getView() por lo que si desea cambiar el color de fondo vista de lista usan este:

v.setBackgroundColor(Color.CYAN); 

Si desea cambiar el textColor continuación, hacer esto:

tv.setTextColor(Color.RED); 

y para el TEXTSIZE:

tv.setTextSize(20); 

donde 'v' es la vista de lista y 'tv' es el TextView

1

U Si desea poner el fondo de la lista a continuación, colocar la imagen antes de la < Textview >

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

y si quieres cambiar de color a continuación, poner el código de color en el cuadro de texto anterior como esto

android:textColor="#ffffff" 
1

Si sólo tiene que cambiar algunos parámetros de la vista y el comportamiento predeterminado de ArrayAdapter su visto bueno para usted:

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

Aún mejor, no es necesario para crear diseño xml androide separado para la vista de lista de células. Solo puede usar "android.R.layout.simple_list_item_1" si la lista solo contiene textview.

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

Si desea utilizar un color de colors.xml, experimento :

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)); 
     ... 
    } 

Se puede utilizar también:

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

en Android 6.0 se puede cambiar el color del texto como a continuación

holder._linear_text_active_release_pass.setBackgroundColor(ContextCompat.getColor(context, R.color.green)); 
Cuestiones relacionadas