ActionBar 下拉菜单样式设计

17

我正在使用一种自定义主题,它继承自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>

但是我不知道如何将文本颜色更改为黑色。因为在设置了白色可绘制对象后,问题就出现了,即文本不能被看见,因为它是白色的,而背景也是白色的。

4个回答

21
经过一番调查,我自己回答这个问题。除了需要对问题进行样式设置外,您还需要:
  • actionBarWidgetTheme 定制 android:spinnerDropDownItemStyle 以更改其文本外观。
  • 还要记住下拉列表是由您使用的适配器管理的。如果您使用了标准适配器(simple_dropdown_item_1line),那么没有问题。但如果像我一样使用了自定义适配器(以便添加图标),请不要忘记在您的布局 TextView 中应用 style="?attr/spinnerDropDownItemStyle"

最终的自定义样式如下:

<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样式生成器Android资产工具箱中生成它们。


不能将@style/Theme作为父级,否则在IDE中会显示为红色。 - JPM

3

2
我发现这可能是最简单的方法。 我正在使用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>

太棒了!但我认为它只能在Light.DarkActionBar主题下工作。 - rubenlop88

0

我的建议是简单地从Sherlock.Light主题继承并将适用字段更改为Dark值。 对于我的应用程序,我们想要一个白色的“up”图标和操作标签的白色文本。 我没有提供actionbar图标的暗色版本,因此它们都是白色的。 因此,在花费了几个小时玩弄和按照不同人的建议后,我终于在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>

就是这样。这比尝试扩展类、在代码中重新设计样式等要简单得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接