2010-12-26 36 views
43

Estoy tratando de establecer el ListView textColor en negro, ya que estoy usando un fondo blanco.Android ListView Color de texto

Aquí es mi MailActivity

public class MailActivity extends ListActivity { 

    String[] listItems = { "Compose", "Inbox", "Drafts", "Sent" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.mails); 

     setListAdapter(new ArrayAdapter(this, 
       android.R.layout.simple_list_item_1, listItems)); 

    } 
} 

y mi XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Empty set" 
     android:textColor="#000000" /> 

</LinearLayout> 

Me estoy poniendo el fondo como blanco, pero no estoy seguro de dónde establecer el primer plano a negro. Lo intenté en el xml y parece que no está ayudando.

Respuesta

135

Ok, aquí hay algunas cosas que debe tener en claro acerca de:

  1. El color de fondo se está configurando en el archivo XML es de la actividad y no de los ListItems que están tratando de definir.
  2. Cada elemento de la lista tiene su propio archivo de diseño que se debe pasar o inflar en caso de que esté utilizando el diseño complejo para el elemento de la lista.

Voy a tratar de explicar esto con un ejemplo de código:

**** Vamos a empezar con el diseño ListItems ** : guardarlo en su carpeta de res/layout de ustedes proyecto Android con, por ejemplo ** list_black_text .xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- Definig a container for you List Item--> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:gravity="center_vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Defining where should text be placed. You set you text color here--> 
    <TextView 
     android:id="@+id/list_content" 
     android:textColor="#000000" 
     android:gravity="center" 
     android:text="sample" 
     android:layout_margin="4dip" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

Bueno, un diseño simple con un TextView para ser precisos. Debe tener una identificación asignada a TextView para usarla.

Ahora viene a su pantalla/actividad/diseño principal, como dije, está definiendo el fondo de su pantalla con el atributo android:background. Veo que también ha definido un TextView allí y sospecho que está tratando de definir el contenido/elemento de la lista allí, que no es necesario en absoluto.

Aquí es su diseño Editado:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 

    <ListView 
     android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
     <!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE --> 
</LinearLayout> 

Y, por último, lo más importante, configurar su adaptador.

setListAdapter(new ArrayAdapter<String>(
      this, R.layout.list_black_text, R.id.list_content, listItems)); 

Aviso el recurso disposición que estamos pasando al adaptador R.layout.list_black_text y R.id.list_content que es TextView ID que declaramos. También cambié el ArrayAdapter al tipo de cadena porque es genérico.

Espero que esto lo explique todo. Marque mi respuesta aceptada si está de acuerdo.

sucia pero una buena forma de solución rápida
También puede hacer esto con una solución rápida si no desea seguir adelante con diseño complejo definir etc.

al crear la instancia del adaptador de declarar una clase interna para hacer esto, aquí está el ejemplo de código:

ArrayAdapter<String> adapter=new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, listItems){ 

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

      TextView textView=(TextView) view.findViewById(android.R.id.text1); 

      /*YOUR CHOICE OF COLOR*/ 
      textView.setTextColor(Color.BLUE); 

      return view; 
     } 
    }; 

    /*SET THE ADAPTER TO LISTVIEW*/ 
    setListAdapter(adapter); 
+0

Muchas gracias amigo. nunca supe que había un archivo xml separado para ListView –

+0

Esto me da el error: ArrayAdapter requiere que el ID del recurso sea un TextView. ¿Cómo se las arregló para que esto funcione sin escribir su propio adaptador? – odiggity

+0

@odiggity, use 4 argumentos constructor en lugar de 3. Si ya está haciendo eso, entonces el 3er arg en 4 arg constructor es una referencia id a la vista de texto descrita en el diseño de su lista, en resumen R.id.list_content en mi example es id que se refiere a textview en el diseño de mi elemento de lista especificado con R.layout.list_black_text – Shardul

3

Debe definir el color del texto en el diseño * simple_list_item_1 * que define el diseño de cada uno de sus elementos.

Establece el color de fondo de LinearLayout y no de ListView. El color de fondo de los elementos secundarios de LinearLayout es transparente por defecto (en la mayoría de los casos).

Y establece el color de texto negro para el TextView que no es parte de su ListView. Es un elemento propio (elemento hijo de LinearLayout) aquí.

21
  1. Crear un archivo de estilos, por ejemplo: my_styles.xml y guardarlo en res/values.
  2. Agregue el código siguiente:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    
    <style name="ListFont" parent="@android:style/Widget.ListView"> 
        <item name="android:textColor">#FF0000</item> 
        <item name="android:typeface">sans</item> 
    </style> 
    
    </resources> 
    
  3. Añadir su estilo a su definición Activity en su AndroidManifest.xml como un atributo android:theme, y asignar como valor el nombre del estilo que ha creado. Por ejemplo:

    <activity android:name="your.activityClass" android:theme="@style/ListFont"> 
    

NOTA: el Widget.ListView proviene de here. También marque this.

+1

Intenté esto y está cambiando el color de la barra de título, no el color del elemento de la lista. – mdegges

+0

es genial, me gusta ... porque estoy agregando elementos dinámicamente en la vista de lista. No necesitaba definir ninguna vista de texto ... –

+0

No funciona para mí –

0

nunca use getApplicationContext(). Solo usa tu Actividad como Contexto. A ver si eso ayuda.

Por favor marque aquí: CommonsWare answers

6

cloné la simple_list_item_1 (Alt + Clic) y se coloca la copia en mi carpeta de res/layout, renombraron a list_white_text.xml con el siguiente contenido:

<?xml version="1.0" encoding="utf-8"?>  
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:textColor="@color/abc_primary_text_material_dark" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 

Los android:textColor="@color/abc_primary_text_material_dark" Traduce a blanco en mi dispositivo.

a continuación en el código java:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList); 
-2

Usted puede hacer esto en el código:

final ListView lv = (ListView) convertView.findViewById(R.id.list_view); 

for (int i = 0; i < lv.getChildCount(); i++) { 
    ((TextView)lv.getChildAt(i)).setTextColor(getResources().getColor(R.color.black)); 
} 
0

si nose fija su estilo actividad que muestra fondo negro Si usted quiere hacer cambios tales como fondo blanco, texto negro de listview entonces es un proceso difícil.

AÑADIRandroid: theme = "@ estilo/AppTheme"en Android Manifiesto.

+0

Requiere la edición – Billa