Light.DarkActionBar菜单项文本颜色不可更改?

21

我正在开发的应用程序使用ActionBarSherlock,主题继承自Theme.Sherlock.Light.DarkActionBar。设计需要溢出菜单弹出窗口具有深色背景和白色文本。对于没有物理菜单按钮的设备,这可以正常工作,并且文本显示为所需的白色。然而,如果设备有物理菜单按钮,则菜单中显示的文本仍然是黑色。

我的主题包含:

<item name="android:panelBackground">@drawable/menu_hardkey_panel</item>

...其中@drawable/menu_hardkey_panel是一个深色的9patch。

菜单弹出窗口的结果外观为... Light.DarkActionbar issue

我无法确定这是为什么,或如何手动更改文本的颜色。在我的主题中,我尝试了以下所有方法...

<item name="android:actionMenuTextColor">@android:color/white</item>
<item name="android:textAppearanceLargePopupMenu">@style/MyMenuTextAppearance.Large</item>
<item name="android:textAppearanceSmallPopupMenu">@style/MyMenuTextAppearance.Small</item>

我甚至尝试过

<item name="android:actionBarWidgetTheme">@style/Theme.MyApp.Dark</item>

...其中 Theme.MyApp.Dark 是...

<style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock">
    <item name="android:dropDownListViewStyle">@style/DropDownListView</item>
    <item name="dropDownListViewStyle">@style/DropDownListView</item>
</style>

没有一个让我把文本改成白色的选项。如果让我的基础主题继承Theme.Sherlock,问题就解决了,文本就变成白色了,但不幸的是这不是一个选项。


2
你尝试过带有和不带有 android 的两种方式吗?例如:<item name="actionMenuTextColor">@android:color/white</item><item name="android:actionMenuTextColor">@android:color/white</item> ??? - ALiGOTec
当然有。唉,它并没有解决问题。 - Chris Horner
你找到解决方案了吗? - Gal Ben-Haim
很遗憾,我不得不使用白色的 9patch 图片作为“android:panelBackground”的背景,以确保文本清晰可读。 - Chris Horner
我的解决方案,请查看:https://dev59.com/ZWYq5IYBdhLWcg3wmRoC#16812229 - Oleksii Malovanyi
显示剩余5条评论
6个回答

2

我不是很确定,但我认为弹出菜单使用与溢出菜单相同的样式。如果是这种情况,您只需像这样操作。

<item name="android:itemTextAppearance">@style/your_new_text_appearance</item>

<style name="your_new_text_appearance">
    <item name="android:textColor">@android:color/white</item>
</style>

1

给它一个机会:有一个名为actionMenuTextAppearance的文本外观。你试过了吗?

更新:我进行了更深入的挖掘,我相信这个文件是布局,在那里他们引用了textAppearanceListItemSmalltextAppearanceSmall。然而,它从一个特殊的主题中获取这个值,该主题在{{link2:Theme.Holo.Light中指定}}。

<item name="panelMenuListTheme">@android:style/Theme.Holo.Light.CompactMenu</item>

就像这样在Theme.Holo中:

<item name="panelMenuListTheme">@android:style/Theme.Holo.CompactMenu</item>

问题出在 Sherlock.__Theme.DarkActionBar 的父级是 Theme.Sherlock.Light,这对于深色操作栏来说是无效的。从 Theme.Holo 中取出该行应该就可以解决问题了。

你确定它是一个弹出窗口吗?词汇混乱不堪。你能否发布一段代码,展示这个问题的一个例子? - Tobias Ritzau
没错,我并不100%确定“弹出”是正确的技术术语。我已经编辑了原始问题,以准确地概述如何重新创建该问题。 - Chris Horner
这确实有些棘手...我可能已经找到了菜单的布局文件和问题的原因。我正在更新我的答案。 - Tobias Ritzau
我刚刚尝试添加了 @android:style/Theme.Holo.CompactMenu(以及android:panelMenuListTheme),但编译器抛出错误:找不到与给定名称匹配的资源:attr 'panelMenuListTheme'也许我误解了你的回答? - Chris Horner
我现在看到它是一个内部资源...就我所记得的,你不能使用@*android:语法访问内部属性...嗯,我会寻找一个解决方法。 - Tobias Ritzau
1
我只找到了一种折中的方法,但你应该能够让Sherlock.__Theme.DarkActionBar继承自Theme.Sherlock(以正确获取面板),并重置所有其他公共属性来自Theme.Holo.Light和Theme.Sherlock.Light。这很繁琐,但应该可以让你接近目标。 - Tobias Ritzau

1
在我的研究中,我没有找到改变文本颜色的方法,但您至少可以优雅地处理硬键菜单。这个链接为我提供了一个过得去的解决方案: https://github.com/jgilfelt/android-actionbarstylegenerator/issues/30 从生成的主题中注释掉“android:panelBackground”项目可以让文本至少在硬键菜单上可见,即使它不完全匹配主题。
您还可以尝试用适合您的主题和黑色文本的内容替换“menu_hardkey_panel_whatever.9.png”可绘制对象。

0

我找到了解决方案,使用:

getSupportActionBarContext()

例如

ArrayAdapter<CharSequence> list =
            ArrayAdapter.createFromResource(getSupportActionBarContext(), R.array.navigation, layout.simple_spinner_item);
    list.setDropDownViewResource(layout.simple_spinner_dropdown_item);

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    getSupportActionBar().setListNavigationCallbacks(list, this);

0

对我来说,这解决了问题,请尝试使用这个替代方案:

<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
    ...
    <item name="actionBarWidgetTheme">@null</item>
    <item name="android:actionBarWidgetTheme">@null</item>
    ...
</style>

-1
我认为Theme.Sherlock.Light.DarkActionBar不能正确地为其内容设置样式是因为actionWidgetTheme属性与ContextThemeWrapper一起用于填充操作栏视图(Jake Wharton的原话),因此需要类似以下代码(未经测试)来满足您的需求,尽管这种方法会违反您不使用Theme.Sherlock作为父级的要求:
<style name="MyColorTheme" parent="Theme.Sherlock">
    <item name="android:actionMenuTextColor">@android:color/white</item>
    <item name="actionMenuTextColor">@android:color/white</item>
</style>

<style name="YourMainTheme" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="android:actionMenuTextAppearance">@style/MyColorTheme</item>
    <item name="actionMenuTextAppearance">@style/MyColorTheme</item>
</style>

可能有效,也可能无效。这就是问题所在 :)


好点子!我刚刚尝试了一下,但很遗憾它还是不起作用。 - Chris Horner
尝试切换actionMenuTextColor和actionMenuTextAppearance。也许会有用?=) - Widerberg
哈哈,我也试了一下!没有成功 =( - Chris Horner

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