Light.DarkActionBar пункт меню цвет текста не меняется?
В приложении, которое я разрабатывал, используется ActionBarSherlock, а основная тема наследуется от Theme.Sherlock.Light.DarkActionBar. Дизайн требует, чтобы всплывающие окна переполнения имели темный цвет фона и белый текст. Это отлично работает для устройств без физической кнопки меню, и текст выглядит белым, как предполагалось. Однако, если устройство имеет физическую кнопку меню, текст, отображаемый в отображаемом меню, остается черным.
Моя основная тема содержит
<item name="android:panelBackground">@drawable/menu_hardkey_panel</item>
... Где @drawable/menu_hardkey_panel - 9patch темного цвета.
Полученный внешний вид всплывающего меню... ![Light.DarkActionbar issue]()
Я не могу определить, почему это происходит, или как вручную изменить цвет текста. В моей основной теме я пробовал все следующие...
<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textAppearanceLargePopupMenu">@style/MyMenuTextAppearance.Large</item>
<item name="android:textAppearanceSmallPopupMenu">@style/MyMenuTextAppearance.Small</item>
Я даже пробовал
<item name="android:actionBarWidgetTheme">@style/Theme.MyApp.Dark</item>
... Где Theme.MyApp.Dark...
<style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock">
<item name="android:dropDownListViewStyle">@style/DropDownListView</item>
<item name="dropDownListViewStyle">@style/DropDownListView</item>
</style>
Никто не позволил мне изменить текст на белый. Если я наследую основную тему на Theme.Sherlock, проблема решена и текст белый, но, к сожалению, это не вариант.
Ответы
Ответ 1
Не совсем уверен в этом, но я считаю, что всплывающее меню использует тот же стиль, что и меню переполнения. В этом случае вы просто делаете что-то вроде этого.
<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>
Ответ 2
Дайте ему шанс: есть текст, который называется actionMenuTextAppearance
. Вы пробовали это?
Обновление: Я сделал еще несколько копаний, и я считаю, что этот файл макет И там они ссылаются на textAppearanceListItemSmall
и textAppearanceSmall
. Однако оно принимает это значение из специальной темы, которая указана как следующая в Theme.Holo.Light
<item name="panelMenuListTheme">@android:style/Theme.Holo.Light.CompactMenu</item>
И как в Theme.Holo
:
<item name="panelMenuListTheme">@android:style/Theme.Holo.CompactMenu</item>
Проблемы возникают из-за того, что родительский элемент Sherlock.__Theme.DarkActionBar
равен Theme.Sherlock.Light
. Это не действует для панели темного действия. Взятие строки из Theme.Holo
должно сделать трюк.
Ответ 3
В моих исследованиях я не нашел способ изменить цвет текста, но вы можете, по крайней мере, обрабатывать меню жесткой клавиатуры изящно.
Эта ссылка предоставила мне приемлемое решение проблемы:
https://github.com/jgilfelt/android-actionbarstylegenerator/issues/30
Комментируя элемент "android: panelBackground" из моей сгенерированной темы, разрешаем текст, по крайней мере, быть видимым в меню жестких клавиш, даже если он не соответствует теме.
Вы также можете попробовать заменить "menu_hardkey_panel_whatever.9.png" с помощью чего-то, что будет работать для вашей темы и черного текста.
Ответ 4
Для меня это решает проблему, попробуйте это вместо:
<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
...
<item name="actionBarWidgetTheme">@null</item>
<item name="android:actionBarWidgetTheme">@null</item>
...
</style>
Ответ 5
Я нашел решение, используйте:
getSupportActionBarContext()
например.
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);
Ответ 6
Я думаю, что из-за того, что Theme.Sherlock.Light.DarkActionBar не стирает его содержимое, это связано с тем, что атрибут actionWidgetTheme используется с ContextThemeWrapper для раздувания представлений панели действий (собственные слова Джейка Уортона), таким образом что-то вроде следующего (не протестированного) будет необходимо для удовлетворения ваших потребностей, хотя вам не нужно использовать Theme.Sherlock как родителя одним способом:
<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>
Может работать или не работать. Что вопрос:)