2012-07-13 119 views
17

我正在使用自定义主题,从DarkActionBar继承,我想要自定义下拉菜单是白色,如使用光全息主题时。样式ActionBar下拉菜单

我已经能够背景更改为白色使用:

<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> 

但我还没有怎么改变文字颜色为黑色的任何线索。因为在设置白色可绘制之后问题在于文本不可见,因为在白色背景上是白色的。

回答

21

我经过一番调查后回答自己。 除了质疑的造型,你需要:

  • 自定义android:spinnerDropDownItemStyleactionBarWidgetTheme改变它的文本外观。
  • 另外不要忘记,下拉列表是由您使用的适配器管理的。那么如果你使用标准的(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可绘有白色背景的,你可以在Android Asset Studio

+5

不适用于API 19 – 2014-01-10 14:51:19

0

ActionBar Style generator产生我的建议是简单地继承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> 

就是这样。它比试图扩展类,在代码中重新编码等方式更简单,更容易。

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> 
+0

卓越!但我认为它只能用于Light.DarkActionBar主题。 – rubenlop 2014-09-13 18:52:47