Android弹出菜单文本颜色(AppCompat)

37

我需要更改弹出菜单的文本颜色,但是我找不到任何方法来做到这一点。我可以更改弹出菜单的背景,但无法更改文本。我以以下方式编辑了style.xml:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!-- API 14 theme customizations can go here. -->

    <item name="popupMenuStyle">@style/MyPopupMenu</item>
    <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
    <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
</style>

<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">#0F213F</item>
</style>

<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Small">
    <item name="android:textColor">#ffffff</item>
</style>

<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Large">
    <item name="android:textColor">#ffffff</item>
</style>

哪里出了错?


请在AppTheme中定义您的样式,而不是在AppBaseTheme中。默认情况下,AppBaseTheme针对API级别11和14具有自己的实现,这会重新定义您的样式。 - Ganster41
可能是如何为PopupMenu设置样式?的重复问题。 - Artjom B.
@ArtjomB。有一些重叠,但这个问题并不是关于AppCompat弹出窗口的重复。 - Bob Snyder
4个回答

53

在 styles.xml 中

<style name="itemTextStyle.AppTheme" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
        <item name="android:textColor">@drawable/color_item_popup</item>
        <item name="android:textSize">@dimen/text_content</item>
    </style>

并添加到AppTheme中

<item name="android:itemTextAppearance">@style/itemTextStyle.AppTheme</item>

颜色项弹出窗口的XML文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/primary_text"/>
    <item android:state_focused="true" android:color="@color/primary_text"/>
    <item android:color="@color/secondary_text"/>
</selector>

27
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>

我认为你正在使用TextAppearance.AppCompat.Base.Widget.PopupMenu。这里是错误,你正在使用另一个父级,它不能响应当前的样式。

你必须使用:

TextAppearance.AppCompat.Light.Widget.PopupMenu。


1
这是什么意思?你能否编辑一下,使得 OP 所做的任何事情都与你打算解决问题的方式合并在一起吗? - bharal
我无法更改字体颜色。您能否更新以完整回答所有需要的样式。 - Shabbir Dhangot
这是我根据这个答案所做的,它对我起作用了,谢谢Alfaplus!<style name="OverflowMenuText" parent="TextAppearance.AppCompat.Light.Widget.PopupMenu.Large"> <item name="android:textColor">@color/colorToolbarText</item> </style> - Lara Ruffle Coles

20

在styles.xml中:

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
    <item name="android:popupBackground">@color/white</item>
</style>

在Java中:

Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu); final PopupMenu popupMenu = new PopupMenu(wrapper, view);


3
//In Main Style
<item name="popupMenuStyle">@style/popupMenuStyle</item>
    <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
    <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>


  //In Define part

   <style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">@drawable/popup_bg</item>
    <item name="android:textColor">#ffffff</item>
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small">
    <item name="android:textColor">#ffffff</item>
</style>

<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large">
    <item name="android:textColor">#ffffff</item>
</style>

  //you may use this background 
 //popup_bg.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
    android:angle="135"
    android:centerColor="#c8232323"
    android:endColor="#c80d0d0d"
    android:startColor="#c8434242"
    android:type="linear" />
</shape>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接