自定义PopupMenu样式被忽略

时间:2016-04-21 20:42:37

标签: android android-styles popupmenu android-popupwindow

我一直在努力使用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>

2 个答案:

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

相关问题