Выпадающее меню Action
Я использую настраиваемую тему, наследующую от DarkActionBar
, и я хочу настроить выпадающее меню как белое, как при использовании темы Light Holo.
Мне удалось изменить фон на белый, используя:
<style name="MyTheme" parent="@style/Theme.Light.DarkActionBar">
<item name="android:actionDropDownStyle">@style/MyDropDownNav</item>
</style>
<style name="MyDropDownNav">
<item name="android:background">@drawable/spinner_background_white</item>
<item name="android:popupBackground">@drawable/menu_dropdown_panel_whyite</item>
<item name="android:dropDownSelector">@drawable/selectable_background_white</item>
</style>
Но я понятия не имею, как изменить цвет текста на черный. Потому что после установки белого цвета проблема заключается в том, что текст не отображается, потому что белый на белом фоне.
Ответы
Ответ 1
Я отвечу сам после некоторого расследования.
В дополнение к типу вопросов вам необходимо:
- Настроить
android:spinnerDropDownItemStyle
для actionBarWidgetTheme
, изменив его внешний вид.
- Также не забывайте, что выпадающий список управляется адаптером, который вы используете. Тогда, если вы использовали стандартный (
simple_dropdown_item_1line
), проблем нет. Но если вы использовали пользовательский, похожий на меня (чтобы добавить значок) , не забудьте применить style="?attr/spinnerDropDownItemStyle"
в своем макете TextView.
Тогда окончательный пользовательский стиль:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.myapp" parent="@style/Theme.Light.DarkActionBar">
<item name="android:actionDropDownStyle">@style/myapp_DropDownNav</item>
<item name="android:actionBarWidgetTheme">@style/myapp.actionBarWidgetTheme</item>
</style>
<style name="myapp.actionBarWidgetTheme" parent="@style/Theme.">
<item name="android:spinnerDropDownItemStyle">@style/myapp.Widget.DropDownItem.Spinner</item>
</style>
<style name="myapp_DropDownNav" parent="@style/Widget.Spinner.DropDown.ActionBar">
<item name="background">@drawable/spinner_background_ab_myapp</item>
<item name="android:background">@drawable/spinner_background_ab_myapp</item>
<item name="android:popupBackground">@drawable/menu_dropdown_panel_myapp</item>
<item name="android:dropDownSelector">@drawable/selectable_background_myapp</item>
</style>
<style name="myapp.Widget.DropDownItem.Spinner" parent="Widget.DropDownItem.Spinner">
<item name="android:textAppearance">@style/myapp.TextAppearance.Widget.DropDownItem</item>
</style>
<style name="myapp.TextAppearance.Widget.DropDownItem" parent="TextAppearance.Widget.DropDownItem">
<item name="android:textColor">@color/black</item>
</style>
Где чертежи в myapp_DropDownNav
являются белыми фонами, которые вы можете генерировать с помощью генератора ActionBar Style в Android Asset Studio
Ответ 2
Попробуйте установить itemTextAppearance
. Это должно достичь того, чего вы хотите.
Ответ 3
Я наткнулся на то, что может быть самым простым способом сделать это. Я работал с библиотекой AppCompat.
<style name="ApplicationTheme" parent="@style/Theme.AppCompat">
<item name="android:actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
</style>
Ответ 4
Мой совет - просто наследовать тему Sherlock.Light и изменить применимые поля на значения Dark. Для моего приложения нам нужен белый значок "вверх" и белый текст для ярлыков действий. Я не предоставляю темные версии своих значков в действии, поэтому они все белые. Поэтому, после нескольких часов работы с ним и после различных предложений людей, я наконец нашел то, что искал в файле тем ABS.
Я унаследовал от Sherlock.Light(ну, технически HoloEverywhereLight.Sherlock, но...) и изменил:
<item name="android:actionMenuTextColor">@color/White</item>
<item name="actionMenuTextColor">@color/White</item>
<item name="android:homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item>
<item name="homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item>
<item name="android:dividerVertical">@drawable/abs__list_divider_holo_dark</item>
<item name="dividerVertical">@drawable/abs__list_divider_holo_dark</item>
Что это. Это проще и проще, чем пытаться расширить классы, переделывать вещи в коде и т.д.