it-swarm.com.ru

Раскрывающееся меню Styling ActionBar

Я использую собственную тему, которая наследуется от 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>

Но я понятия не имею, как изменить цвет текста на черный. Потому что после установки белого рисования проблема в том, что текст не виден, потому что белый на белом фоне.

17
lujop

Я отвечаю сам после некоторого расследования . В дополнение к стилю вопроса необходимо:

  • Настройте 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 in Android Asset Studio

21
lujop

Попробуйте установить itemTextAppearance . Это должно достичь того, что вы хотите.

3
Jason Robinson

Я наткнулся на то, что может быть самым простым способом сделать это. Я работал с библиотекой 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>
2
Georgie

Мой совет - просто унаследовать тему 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>

Вот и все. Это намного проще и проще, чем пытаться расширять классы, перестраивать вещи в коде и т.д.

0
toadzky