Подтвердить что ты не робот

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, проблема решена и текст белый, но, к сожалению, это не вариант.

4b9b3361

Ответ 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>

Может работать или не работать. Что вопрос:)