我一直在努力使用PopupMenu样式,经过大量研究后,为我的主题创建自定义PopupMenu样式的过程似乎相当直接。例如,this question上的答案似乎是一种更改PopupMenu背景颜色的简单方法。但是,这些解决方案都没有适用于我的项目。所以我开始深入研究样式源,找出我应该继承的内容,以便在我自己的项目中设置PopupMenu的样式。
我在运行API 19的手机上运行我的测试,我的基本主题看起来像这样:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- ... -->
<item name="android:popupMenuStyle">@style/CustomPopupMenu</item>
</style>
<style name="CustomPopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu">
<item name="android:popupBackground">@color/retina_burning_hot_pink</item>
</style>
这是大多数接受的答案在这里显示的解决方案。但这不会影响我的PopupMenu。所以我挖掘了源代码,找到了我的主题的基因,并查看了使用的默认设置。这是我发现的:
<style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/>
<style name="Base.Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light">
<style name="Base.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light"/>
然后在Base.V7.Theme.AppCompat.Light
我找到了这些默认设置:
<!-- Popup Menu styles -->
<item name="popupMenuStyle">@style/Widget.AppCompat.Light.PopupMenu</item>
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
<item name="listPopupWindowStyle">@style/Widget.AppCompat.ListPopupWindow</item>
<item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item>
据我所知,我的主题继承自Theme.AppCompat.Light.DarkActionBar
,它使用默认的PopupMenu样式@style/Widget.AppCompat.Light.PopupMenu
。然后我继承了该样式以设置我自己的PopupMenu设置。我确保我的Activity和我的应用程序都使用了正确的主题。我不确定为什么这只是不起作用。我也尝试过这些设置:
<item name="android:textAppearanceLargePopupMenu">@style/CustomPopupMenuLarge</item>
<item name="android:textAppearanceSmallPopupMenu">@style/CustomPopupMenuSmall</item>
<item name="android:popupWindowStyle">@style/CustomPopupMenuListWindow</item>
我为每个人提供了自定义样式,但没有一个有效。什么可以覆盖我的所有自定义样式?任何帮助都会受到赞赏,因为我很难过。
EDITS
这是我的清单......
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blah.blah">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".Activities.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
以下是AppTheme.NoActionBar
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
答案 0 :(得分:0)
我认为您需要为AppCompat.NoActionBar
定义父级。尝试parent="Theme.AppCompat.Light.NoActionBar"
并在其中加<item name="android:popupMenuStyle">@style/CustomPopupMenu</item>
。
答案 1 :(得分:0)
请勿在
中指定android:
<item name="android:popupMenuStyle">@style/CustomPopupMenu</item>
。
Instend:
<item name="popupMenuStyle">@style/CustomPopupMenu</item>