studio item icon color change android listview

icon - menu item background color android



Color de texto ListView de Android (7)

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

Aquí está 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>

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


  1. Cree un archivo de estilos, por ejemplo: my_styles.xml y guárdelo en res/values .
  2. Agregue el siguiente código:

    <?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. Agregue su estilo a su definición de Activity en su AndroidManifest.xml como un atributo android:theme , y asigne 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 revisa this .


Bien, aquí hay algunas cosas que debes tener claras:

  1. El color de fondo que está configurando en su archivo xml corresponde a la actividad y no a los ListItems que está tratando de definir.
  2. Cada elemento de la lista tiene su propio archivo de diseño que debe pasarse o inflarse en caso de que esté utilizando un diseño complejo para el elemento de la lista.

Trataré de explicar esto con una muestra de código:

**** Comencemos con el diseño de ListItems ** : guárdelo en su carpeta res/layout de su proyecto Android con decir ** 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 tu pantalla / actividad / diseño jefe, como dije, estás definiendo fondo en tu pantalla con android:background atributo de 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í está 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, configure su adaptador.

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

Observe el recurso de diseño que estamos pasando al adaptador R.layout.list_black_text y R.id.list_content que es el ID de R.id.list_content que declaramos. También cambié el ArrayAdapter al tipo de cadena porque es genérico.

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

Desordenado, pero una buena solución rápida
También puede hacer esto con una solución rápida si no quiere seguir adelante con la definición de diseño complejo, etc.

Al instanciar el adaptador declarar una clase interna para hacer esto, aquí está el ejemplo del 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);


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í.


Puedes hacer esto en tu 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)); }


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

Por favor, consulte aquí: respuestas de CommonsWare


si no configuró su estilo de actividad, le muestra el fondo negro. Si desea realizar cambios tales como fondo blanco, texto negro de vista de lista, entonces es un proceso difícil.

ADD android: theme = "@ style / AppTheme" en Android Manifest .


simple_list_item_1 la simple_list_item_1 (Alt + Click) y coloqué la copia en mi carpeta res/layout , list_white_text.xml a list_white_text.xml con este 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" />

El android:textColor="@color/abc_primary_text_material_dark" traduce en blanco en mi dispositivo.

luego en el código java :

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