【问题标题】:Custom PopupMenu styles are being ignored自定义 PopupMenu 样式被忽略
【发布时间】:2016-04-21 20:42:37
【问题描述】:

我一直在努力使用 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 设置。我确保我的活动和应用程序都使用正确的主题。我不知道为什么这行不通。我也试过这些设置:

<item name="android:textAppearanceLargePopupMenu">@style/CustomPopupMenuLarge</item>
<item name="android:textAppearanceSmallPopupMenu">@style/CustomPopupMenuSmall</item>
<item name="android:popupWindowStyle">@style/CustomPopupMenuListWindow</item>

我为每一个都提供了自定义样式,但它们都不起作用。什么可以覆盖我所有的自定义样式?任何帮助将不胜感激,因为我很难过。


编辑

这是我的清单...

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

【问题讨论】:

  • 你是在 manifest 中设置主题吗?
  • @Sree - 是的,如问题所述。
  • 我们能看一下代码吗(你可能做得对,但只是为了确保)
  • AppCompat.NoActionbar 在哪里
  • 我在上面加了。我也试过把设置放在那里,没有任何区别。

标签: android android-styles popupmenu android-popupwindow


【解决方案1】:

不要在

中指定android:

&lt;item name="android:popupMenuStyle"&gt;@style/CustomPopupMenu&lt;/item&gt;.

参与:

&lt;item name="popupMenuStyle"&gt;@style/CustomPopupMenu&lt;/item&gt;

【讨论】:

    【解决方案2】:

    我认为您需要为AppCompat.NoActionBar 定义父级。尝试parent="Theme.AppCompat.Light.NoActionBar" 并在其中添加&lt;item name="android:popupMenuStyle"&gt;@style/CustomPopupMenu&lt;/item&gt;

    【讨论】:

    • 我已经尝试过了,没有任何区别。我尝试将 AppTheme 设为父级,现在我只是尝试了您的建议,它改变了一些颜色,但 PopupMenu 保持不变。
    • 嗯..应该可以工作。我可以看看你对我的建议所做的更改吗
    • 我只是按照您的建议进行了更改。我做了顶线&lt;style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"&gt; 并在正文中添加了&lt;item name="android:popupMenuStyle"&gt;@style/CustomPopupMenu&lt;/item&gt;
    • 再做一件事,让你的CustomPopupMenu的父parent="@android:style/Widget.PopupMenu"
    • 我也试过了,哈哈。只是作为健全性检查再次尝试,没有任何改变。我可能需要尽快请教牧师。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2014-01-01
    • 2014-10-09
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多