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
- Cómo heredar de un estilo especificado de una versión de api diferente
- Cambiar el color de fondo de un TextView cuando se hace clic
- El estilo de barra de acción hace que la barra de acciones desaparezca
- El tema predeterminado no funciona después de habilitar el archivo Proguard (minifyEnabled true)
- No se puede eliminar la barra de título en Actividad
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.
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>
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?
- Título de barra de acción desaparece cuando se le da estilo
- Estilos de Android: Diferencia entre 'style = "@ android: style / XYZ"' y 'style = "? Android: attr / XYZ"'?
- El estilo de botón predeterminado de Android no funciona
- ¿Cómo personalizar el botón?
- Cómo crear barra de progreso de estilo horizontal mediante programación en Android?
- Obtener AppCompat no admite la excepción de características del tema actual después de actualizar a la versión AppCompat v22.1.0 issue
- ¿El panel de vista previa del estudio de Android no representa ActionBar?
- Cómo sustituir estilos de una biblioteca que tiene su propia actividad
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 saber si el usuario está en la pantalla de bloqueo desde el servicio
- ¿Cómo usar un widget de pestañas en Android?