【发布时间】: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