我正在为Android 5.0准备我的应用程序,我正在使用最新的兼容性库,这就是我的风格。
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
</style>
<style name="AppThemeDark" parent="Theme.AppCompat">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
</style>
</resources>
(ActionBar颜色以编程方式设置。)
现在,我希望溢出/弹出菜单具有类似于holo实现中的深色背景,但我无法使其工作,这是它的样子:
我已尝试设置popupMenuStyle
,但它无效。
如何让弹出菜单变暗?
答案 0 :(得分:20)
停止使用ActionBar
。如果您希望将ToolBar
设置为ActionBar
,请在android-developers博客上关注this guide。
它实际上在 Dark Action Bar 中提及了您的用例并提供了此代码:
<android.support.v7.widget.Toolbar
android:layout_height=”wrap_content”
android:layout_width=”match_parent”
android:minHeight=”@dimen/triple_height_toolbar”
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
答案 1 :(得分:10)
不是一个完整的答案,但到目前为止我发现了:
在以前的版本中,您需要指定一个drawable(检查https://github.com/StylingAndroid/StylingActionBar代码和教程)
显然,现在这是一种颜色。要修改它,您需要指定以下主题:<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
<item name="android:actionBarPopupTheme">@style/popupNew</item>
</style>
<style name="popupNew" parent="android:ThemeOverlay.Material.Light">
<item name="android:colorBackground">@color/red</item>
</style>
</resources>
如果应用于应用的主题就是这个,这可以正常工作。
如果我将android:actionBarPopupTheme
添加到现有主题中,则无效。我想弄明白为什么。
答案 2 :(得分:7)
使用此样式解决了我的问题:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/theme_accent</item>
<item name="colorAccent">@color/theme_accent_secondary</item>
<item name="actionBarStyle">@style/AbStyle</item>
<item name="actionModeBackground">@color/actionmode_bg</item>
</style>
<style name="AbStyle" parent="Widget.AppCompat.Toolbar">
<item name="elevation">2dp</item>
<item name="displayOptions">homeAsUp|showTitle</item>
<!--showHome-->
</style>
<style name="AppThemeDark" parent="Theme.AppCompat">
<item name="colorAccent">@color/theme_accent_secondary</item>
<item name="actionBarStyle">@style/AbStyle</item>
</style>
我不得不使用Widget.AppCompat.Toolbar作为父actionBarStyle
答案 3 :(得分:6)
将属性popupTheme添加到工具栏:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_primary"
app:theme="@style/Theme.AppCompat.Light"
app:popupTheme="@style/Theme.AppCompat" />
或者为工具栏定义新样式:
<style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@color/green</item>
<item name="popupTheme">@style/Theme.AppCompat.Light</item>
<item name="theme">@style/Theme.AppCompat</item>
</style>
答案 4 :(得分:1)
这个问题已经通过XML回答了样式,但是我在这里添加了一个解释,说明如何自己解决这个问题和类似的样式问题。
首先,这是使用AppCompat时的解决方案。在App的style.xml中添加actionBarPopupTheme到你的主题:
<style name="Theme.MyTheme" parent="@style/Base.Theme.AppCompat.Light.DarkActionBar">
...other stuff here
<item name="actionBarPopupTheme">@style/Theme.MyTheme.ActionBarPopupTheme</item>
</style>
<style name="Theme.MyTheme.ActionBarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
<item name="android:textColor">@android:color/white</item>
<item name="android:background">@android:color/black</item>
</style>
以下是我为达成此解决方案所采取的步骤(因为Android文档很差,需要一些侦探工作):
在这种风格中,我看到了这一行:
&LT; item name =&#34; actionBarPopupTheme&#34;&gt; @ style / ThemeOverlay.AppCompat.Light &lt; /项目&GT;
这看起来像是一个可能改变弹出窗口主题的地方。我搜索了&#34; actionBarPopupTheme&#34;在穷人 Android开发人员文档并找到&#34;参考应该使用的主题 通过操作栏中的小部件显示弹出窗口&#34;。所以这值得玩。
我复制了包含&#34; actionBarPopupTheme&#34;的appcompat行。到我的style.xml然后在这一行用Theme.MyTheme.ActionBarPopupTheme替换了项目的主题参考(上面的粗体位)。