2016-04-21 130 views
1

我一直在努力与PopupMenu样式,并经过大量的研究,为我的主题创建自定义PopupMenu样式的过程似乎相当直接。例如,this question上的答案看起来像是一个简单的方法来更改PopupMenu的背景颜色。但是,这些解决方案都不适用于我的项目。所以我开始深入研究风格来源,找出我应该实际继承的内容,以便在我自己的项目中设计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> 
+0

你要为主题的清单? – Sree

+0

@Sree - 是的,正如问题所述。 – NoChinDeluxe

+0

我们可以看到代码(您可能正确地做了,但只是为了确保) – Sree

回答

0

我认为你需要定义一个父为AppCompat.NoActionBar。尝试parent="Theme.AppCompat.Light.NoActionBar"并添加<item name="android:popupMenuStyle">@style/CustomPopupMenu</item>

+0

我已经试过这个,它没有区别。我尝试将'AppTheme'作为父项,现在我只是尝试了一下你的建议,它改变了某些颜色的东西,但PopupMenu保持不变。 – NoChinDeluxe

+0

嗯..应该工作。我可以看到您对我的建议所做的更改吗 – Sree

+0

我只是按照您的建议改变了它。我在顶部添加了'