No se puede cambiar el color del texto con la barra desplegable de la barra de acciones de Android

Estoy utilizando Navegación desplegable con mi barra de acción, y no puedo obtener un color sensible para el texto correspondiente cuando se utiliza una barra de acción oscura. La barra de acción en sí es de color gris oscuro, y el color del texto es negro, por lo que es muy difícil de leer.

Seguí las instrucciones básicas de la guía del desarrollador de Action Bar para que mi código sea simplemente

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // TODO return false; } }; ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mSpinnerAdapter, navigationListener); 

Y mi styles.xml era simplemente

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> </style> </resources> 

Creo que debería haberme dado algo sensible, pero como muestra la siguiente imagen, sale como texto negro sobre un fondo gris oscuro por lo que no es bueno.

Imagen de menú con texto negro sobre un fondo gris oscuro

He intentado jugar con el archivo styles.xml para tratar de resolver el problema. Mi mejor intento fue el siguiente

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:actionDropDownStyle">@style/myActionDropDownStyle</item> <item name="android:actionBarStyle">@style/myActionBar</item> </style> <style name="myActionDropDownStyle" parent="android:style/Widget.Holo.Light.Spinner"> <item name="android:background">@color/LightCyan</item> </style> <style name="myActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:titleTextStyle">@style/myActionBar.titleTextStyle</item> </style> <style name="myActionBar.titleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"> <item name="android:textColor">@color/Orange</item> </style> </resources> 

Mejor intento de hacer que los elementos sean legibles en la lista desplegable de navegación

Que era (1) capaz de cambiar el color del texto del título de la aplicación a naranja, (2) capaz de cambiar el color de fondo del elemento de navegación seleccionado en la barra de acción a un azul claro, (3) capaz de cambiar el color de fondo Del menú desplegable para que al menos el texto negro se muestre contra un fondo claro. Sin embargo, nada de lo que hago cambia el color del texto en sí, ya sea para el elemento seleccionado que se muestra en la barra de acción, o para los elementos que se muestran en el menú desplegable. Mi mejor intento también se ve horrible :-(!

Todo lo que quiero es una barra de acción oscura con un color de texto sensible para el elemento seleccionado que se muestra en la barra de acción, que debe ser el mismo color de texto utilizado cuando se selecciona un elemento y con el color de fondo para el menú desplegable cuando un elemento es Siendo seleccionado el mismo color que la barra de acción. Pero no puedo resolver cómo hacerlo, ¿puede alguien ayudar?

FYI, estoy usando Eclipse con un adt-paquete que he descargado muy recientemente (adt-bundle-windows-x86_64-20130219). Cuando busco soluciones, encuentro mucho sobre la barra de acción de Sherlock, sin embargo los estilos para Sherlock no fueron incluidos en ese adt-paquete. En cualquier caso, seguramente lo que quiero debería ser posible con el Holo.Light.DarkActionBar que estoy usando?

Por favor, perdone mi necromancia, pero esto realmente me molestó hoy y la solución es realmente bastante rápido y no requiere adaptadores personalizados o estilo.

Si cambia el contexto en el constructor del SpinnerAdapter para usar getActionBar (). GetThemedContext () en lugar de esto mostrará texto claro en un fondo oscuro que coincidirá con el estilo de la Barra de Acción.

 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 

He averiguado que puedo alterar los colores de la navegación desplegable en código, creando mi propia subclase de ArrayAdapter de la siguiente manera:

 public class myArrayAdaptor<T> extends ArrayAdapter<T> { public myArrayAdaptor(Context context, int textViewResourceId, T[] objects) { super(context, textViewResourceId, objects); } public static myArrayAdaptor<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) { CharSequence[] strings = context.getResources().getTextArray(textArrayResId); return new myArrayAdaptor<CharSequence>(context, textViewResId, strings); } @Override public View getView(int position, View convertView, ViewGroup parent) { return SetColourWhite(super.getView(position, convertView, parent)); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return SetColourWhite(super.getView(position, convertView, parent)); } private View SetColourWhite(View v) { if (v instanceof TextView) ((TextView)v).setTextColor(Color.rgb(0xff, 0xff, 0xff)); // white return v; } } 

Luego con los estilos simples.xml

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> </style> </resources> 

Puedo sustituir la clase myArrayAdaptor

 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item) 

Y el color del texto siempre será blanco. ¿Pero no hay una manera más simple de hacer esto usando ajustes en el archivo de styles.xml?

Código Java

 SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.actions,R.layout.dropdown_textcolor); // OnNavigationListener OnNavigationListener callback = new OnNavigationListener() { String[] items = getResources().getStringArray(R.array.actions); public boolean onNavigationItemSelected(int position, long id) { // Do stuff when navigation item is selected Log.d("NavigationItemSelected", items[position]); // Debug return true; } }; ActionBar actions = getSupportActionBar(); actions.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actions.setDisplayShowTitleEnabled(false); actions.setListNavigationCallbacks(adapter, callback); 

Xml dropdown_textcolor.xml

 <?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerDropDownItemStyle" android:singleLine="true" android:layout_width="match_parent" android:textColor="@android:color/white" android:layout_height="wrap_content" android:padding="10dp" android:ellipsize="marquee" android:textAlignment="inherit"/> 

Si está utilizando la biblioteca de soporte AppCompat .. esto podría ayudarle ..

 <style name="MyActionBar3" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="android:background">@color/ActionBarBackground</item> </style> <style name="MyActionBarDropDownStyle" parent=""> <item name="android:background">#00FF00</item> <item name="android:divider">#ff0000</item> <item name="android:dividerHeight">1dp</item> <item name="android:textColor">#FFFFFF</item> <item name="android:textSize">10sp</item> </style> <style name="MyTextStyle" parent="@style/Widget.AppCompat.Light.Base.ListPopupWindow"> <item name="android:popupBackground">#FF0000</item> </style> 
  • Cómo dar al usuario la posibilidad de cambiar entre diferentes colores skin en tu aplicación
  • Cómo utilizar android: Theme.Material (tema material) en styles.xml android?
  • Crear un CardView mediante programación no aplica correctamente el estilo
  • Cómo utilizar el atributo de tema como selector de color
  • Barra de herramientas ActionMode fondo pre Lollipop no funciona
  • EditText El relleno no funciona
  • ¿Cómo diseñar el Overflow de Barras de Acción en dispositivos con un botón de menú de hardware?
  • El estilo no se aplica en la casilla de verificación personalizada y el botón de radio
  • Cómo configurar el color del borde de la casilla de verificación
  • Inheriting AppCompat 22.1.1 El cuadro de diálogo colorAccent del tema de la aplicación no funciona
  • Cambiar el estilo de CalendarView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.