android - ¿El color del texto del elemento del menú Light.DarkActionBar es inmutable?
android-actionbar actionbarsherlock (6)
Creo que, debido al hecho de que Theme.Sherlock.Light.DarkActionBar no diseña correctamente su contenido, se debe al atributo actionWidgetTheme que se usa con ContextThemeWrapper para inflar las vistas de la barra de acción (las propias palabras de Jake Wharton), por lo tanto, algo así como se necesitará lo siguiente (no probado) para satisfacer sus necesidades, aunque no satisfaga su necesidad de no usar Theme.Sherlock como elemento primario de una manera:
<style name="MyColorTheme" parent="Theme.Sherlock">
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="actionMenuTextColor">@android:color/white</item>
</style>
<style name="YourMainTheme" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="android:actionMenuTextAppearance">@style/MyColorTheme</item>
<item name="actionMenuTextAppearance">@style/MyColorTheme</item>
</style>
Puede trabajar o no trabajar. Esa es la pregunta :)
La aplicación que he estado desarrollando utiliza ActionBarSherlock, y el tema principal se hereda de Theme.Sherlock.Light.DarkActionBar. El diseño requiere que las ventanas emergentes del menú de desbordamiento tengan un fondo de color oscuro y texto blanco. Esto funciona bien para dispositivos sin un botón de menú físico, y el texto aparece en blanco según lo previsto. Sin embargo, si el dispositivo TIENE un botón de menú físico, el texto que se muestra en el menú que se muestra permanece en negro.
Mi tema principal contiene
<item name="android:panelBackground">@drawable/menu_hardkey_panel</item>
... Donde @ drawable / menu_hardkey_panel es un 9patch de color oscuro.
El aspecto resultante del menú emergente es ...
No puedo determinar por qué sucede esto o cómo cambiar manualmente el color del texto. En mi tema principal, he intentado todo lo siguiente ...
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textAppearanceLargePopupMenu">@style/MyMenuTextAppearance.Large</item>
<item name="android:textAppearanceSmallPopupMenu">@style/MyMenuTextAppearance.Small</item>
Incluso he intentado
<item name="android:actionBarWidgetTheme">@style/Theme.MyApp.Dark</item>
... Donde Theme.MyApp.Dark es ...
<style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock">
<item name="android:dropDownListViewStyle">@style/DropDownListView</item>
<item name="dropDownListViewStyle">@style/DropDownListView</item>
</style>
Ninguno me ha dejado cambiar el texto a blanco. Si hago que mi tema base se herede de Theme.Sherlock, el problema se resuelve y el texto es blanco, pero desafortunadamente esa no es una opción.
Dándole una oportunidad: hay una apariencia de texto llamada actionMenuTextAppearance
. ¿Has probado eso?
Actualización: Hice más excavaciones y creo que este archivo es el diseño. Allí se refieren a textAppearanceListItemSmall
y textAppearanceSmall
. Sin embargo, toma este valor de un tema especial que se especifica como sigue en Theme.Holo.Light
<item name="panelMenuListTheme">@android:style/Theme.Holo.Light.CompactMenu</item>
Y así en Theme.Holo
:
<item name="panelMenuListTheme">@android:style/Theme.Holo.CompactMenu</item>
El problema proviene del hecho de que el padre de Sherlock.__Theme.DarkActionBar
es Theme.Sherlock.Light
. Esto no es válido para la barra de acción oscura. Tomando la línea de Theme.Holo
debería hacer el truco.
En mi investigación, no he encontrado una manera de cambiar el color del texto, pero al menos puedes manejar los menús de teclas físicas con gracia.
Este enlace me proporcionó una solución aceptable para el problema: https://github.com/jgilfelt/android-actionbarstylegenerator/issues/30
Al comentar el elemento "android: panelBackground" de mi tema generado permití que el texto fuera al menos visible en los menús de teclas físicas, incluso si no coincide perfectamente con el tema.
También puedes intentar reemplazar el "menu_hardkey_panel_ whatever .9.png" dibujable con algo que funcione para tu tema y el texto en negro.
Encontré la solución, uso:
getSupportActionBarContext()
p.ej
ArrayAdapter<CharSequence> list =
ArrayAdapter.createFromResource(getSupportActionBarContext(), R.array.navigation, layout.simple_spinner_item);
list.setDropDownViewResource(layout.simple_spinner_dropdown_item);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(list, this);
No estoy completamente seguro de esto, pero creo que el menú emergente utiliza el mismo estilo que el menú de desbordamiento. En cuyo caso solo harías algo como esto.
<item name="android:itemTextAppearance">@style/your_new_text_appearance</item>
<style name="your_new_text_appearance">
<item name="android:textColor">@android:color/white</item>
</style>
Para mí esto resuelve el problema, intente esto en su lugar:
<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
...
<item name="actionBarWidgetTheme">@null</item>
<item name="android:actionBarWidgetTheme">@null</item>
...
</style>