【问题标题】:Light.DarkActionBar menu item text colour unchangeable?Light.DarkActionBar 菜单项文本颜色不可更改?
【发布时间】:2012-11-12 08:12:27
【问题描述】:

我一直在开发的应用程序使用了ActionBarSherlock,主旋律继承自Theme.Sherlock.Light.DarkActionBar。该设计要求溢出菜单弹出窗口具有深色背景和白色文本。这适用于没有物理菜单按钮的设备,并且文本按预期显示为白色。但是,如果设备有物理菜单按钮,则显示的菜单中显示的文本仍为黑色。

我的主题包含

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

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

菜单弹出的最终外观是...

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

<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,问题就解决了,文本是白色的,但不幸的是,这不是一个选项。

【问题讨论】:

  • 您是否尝试过使用android 和不使用android?例如:&lt;item name="actionMenuTextColor"&gt;@android:color/white&lt;/item&gt;&lt;item name="android:actionMenuTextColor"&gt;@android:color/white&lt;/item&gt; ???
  • 当然有。唉,这并没有解决问题。
  • 我有一个带有 ICS 和一个菜单按钮的 HTC Sensation。我在 github.com/commonsguy/cw-omnibus/tree/master/EmPubLite/… 测试了 Commonsware 的代码,它使用 Theme.Sherlock.Light.DarkActionBar,但我没有你描述的问题。也许您想尝试该代码(它是一个非常小的程序),看看您是否在该应用中也遇到了问题,或者指出它与您的有何不同。
  • 据我了解,使用 Light.DarkActionBar 生成的弹出菜单将具有浅色背景和深色文本。我正在开发的应用程序的主题要求弹出菜单具有深色背景和浅色文本。它还要求我使用 Light.DarkActionBar,而不是常规的 Theme.Sherlock,因为应用程序中的几乎所有其他小部件都是“浅色”主题。
  • 也许可以试试 ActionBarSherlock 的支持页面:actionbarsherlock.com/support.html。有不同方式获得帮助的链接,包括直接联系 Jake Wharton。

标签: android android-actionbar actionbarsherlock android-menu


【解决方案1】:

对此并不完全确定,但我相信弹出菜单使用与溢出菜单相同的样式。在这种情况下,你只需做这样的事情。

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

【讨论】:

    【解决方案2】:

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

    更新:我做了更多的挖掘,我相信这个文件是 the layout 并且他们指的是 textAppearanceListItemSmalltextAppearanceSmall。但是,它从指定为 following in 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 接电话应该可以解决问题。

    【讨论】:

    • 你确定这是一个弹出窗口吗?词汇真的很乱。你能发布代码来显示这个错误的例子吗?
    • 没错,我不能 100% 确定“弹出”是正确的技术术语。我已经编辑了原始问题以准确概述如何重新创建问题。
    • 这确实很棘手......我可能已经找到了菜单的布局文件和问题的原因。我正在更新我的答案。
    • 我刚刚尝试添加 @android:style/Theme.Holo.CompactMenu (以及 android:panelMenuListTheme),但编译器向我抛出了错误:找不到与给定名称匹配的资源:attr 'panelMenuListTheme' 也许我误解了您的答案?
    • 我只找到了一种解决方法,但您应该能够让 Sherlock.__Theme.DarkActionBar 继承自 Theme.Sherlock (以使面板正确),并重置所有其他属性从 Theme.Holo.Light 和 Theme.Sherlock.Light 公开。这很乏味,但应该让你接近。
    【解决方案3】:

    在我的研究中,我还没有找到改变文本颜色的方法,但您至少可以优雅地处理硬键菜单。

    这个链接为我提供了一个可以解决的问题: https://github.com/jgilfelt/android-actionbarstylegenerator/issues/30

    从我生成的主题中注释掉“android:panelBackground”项允许文本至少在硬键菜单上可见,即使它与主题不完全匹配。

    您也可以尝试将“menu_hardkey_panel_whatever.9.png”drawable 替换为适合您的主题和黑色文本的内容。

    【讨论】:

      【解决方案4】:

      对我来说这解决了问题,试试这个吧:

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

      【讨论】:

        【解决方案5】:

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

        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);
        

        【讨论】:

          【解决方案6】:

          我认为,由于 Theme.Sherlock.Light.DarkActionBar 没有正确设置其内容的样式,是因为 actionWidgetTheme 属性与 ContextThemeWrapper 一起使用以膨胀动作栏视图(杰克沃顿自己的话),因此将需要类似以下内容(未经测试)来满足您的需求,尽管以一种方式打破了您不使用 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>
          

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

          【讨论】:

          • 好主意!刚试了一下,可惜还是不行
          • 尝试切换 actionMenuTextColor 和 actionMenuTextAppearance。可能有用吗? =)
          • 哈哈,我也破解了!没有骰子=(
          猜你喜欢
          • 1970-01-01
          • 2017-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          相关资源
          最近更新 更多