安卓棒棒糖(Android Lollipop)材质设计(Material Design)溢出菜单图标颜色

8
我在Nexus 7上尝试了新的Material Design,并遇到了以下奇怪的问题。启动第一个应用时,溢出菜单图标的颜色不同。
我更改了android:textColorPrimary颜色,并阅读了这个教程
如下所示,首次启动时未设置主要文本颜色。只有当我按下主屏幕按钮并重新启动该应用程序时才会设置它。这是我的styles.xml文件:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
    <item name="android:colorPrimary">#FF4444</item>
    <item name="android:colorPrimaryDark">#CC0000</item>
    <item name="android:textColorPrimary">#000000</item>
</style>

有人能解释一下为什么会出现这种情况吗?
我设置了 android:minSdkVersion="21",并且不想使用支持库。

嘿@alanv,我尝试了你的建议,它使得“Material Demo”和右侧点的文本颜色都变成了白色。如何让它们都变暗? - ztan
哦,我错过了你想让它们都变暗的意思。只使用Light主题就可以实现这一点。你是否在使用appcompat或更改主题中的其他内容? - alanv
这只是解决白色或黑色文本颜色的权宜之计。如果我使用不同的颜色,问题仍然存在。我想知道如何修复它。 - code monkey
请发布工具栏布局代码。 - SagiLow
你是否在使用appcompat? - Alex Lockwood
显示剩余4条评论
5个回答

2
当在LOLLIPOP设备上运行无法使用appcompat-v7库的PreferenceActivity时,我遇到了同样的问题。当首次打开此活动时,溢出图标始终为白色,完全忽略android:textColorPrimary和android:colorControlNormal。然而,后续运行或方向更改会导致正确的着色。
我创建了一个代码片段,可以帮助您缓解这个问题。该代码将全局布局观察器绑定到工具栏上,并在找到溢出图标时替换它并取消绑定观察器。因此,在不期望出现溢出图标的地方不要使用它,因为在那种情况下观察器不会被取消绑定。
链接到代码片段:https://gist.github.com/consp1racy/4b640679de553fdb3046

1

只需在工具栏中添加 android:theme="@style/ThemeOverlay.AppCompat.Dark" 即可。

<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />

溢出菜单图标现在将是白色的 :)


这是唯一对我起作用的方法。使用.Dark属性将使我的溢出菜单图标变为白色!完美! - Brandon

1

只需为选项菜单添加次要文本颜色,即:

<item name="android:textColorSecondary">@color/text_color</item>

在某些情况下,次要颜色设置为主要颜色。我还不知道原因。

不幸的是,那并没有帮助。 - code monkey
你写道你正在使用支持库。你尝试过使用来自android-support-v7库的appcompat主题吗?如果你的目标最低Android版本低于21,你可能应该看一下它。然而,这只是一个侧面的注意点。你是否在使用其他额外的样式或主题来定制操作栏?这些点属于操作溢出并具有其自己的设计:http://developer.android.com/design/patterns/actionbar.html - Denis Loh
更新:现在我已经删除了所有支持库并设置android:minSdkVersion="21" - code monkey

1
请添加这些项目:

<item name="actionMenuTextColor">@color/white</item>
<item name="android:actionMenuTextColor">@color/white</item>

如果这没帮助,那么尝试这个:
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
    <item name="android:itemTextAppearance">@style/TextAppearance</item>
</style>

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

这适用于 Holo.Light.DarkActionBar

不幸的是,那并没有帮助。我在想为什么只有我遇到这个问题。它很容易重现。 - code monkey

1
如果您想在 Android 早于版本 21 的设备上使用 Material Design,您需要扩展 Theme.AppCompat.Light.NoActionBar 主题。为此,您需要将 com.android.support:appcompat-v7:21.0.0 编译添加到您的项目依赖中,这样您就可以在布局中使用工具栏了。
然后在 values/themes.xml 中定义您的主题:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/my_awesome_color</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/my_awesome_darker_color</item>

    <!-- colorAccent is used as the default value for colorControlActivated
     which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>

    <!-- You can also set colorControlNormal, colorControlActivated
    colorControlHighlight & colorSwitchThumbNormal. -->
</style>

并且在您的 layout/my_activity.xml 中添加工具栏:

<android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

你可以使用可选的属性来定义主题和弹出窗口主题:
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

Chris Banes写了一篇很好的关于这个问题的文章,你应该阅读 https://chris.banes.me/2014/10/17/appcompat-v21/

我在问题的评论中看到你在使用eclipse,我强烈推荐使用android studio + gradle而不是eclipse。


我不想在Android 5.0以下的设备上使用它,也不想使用支持库。 - code monkey
那你为什么在注释中说你正在定义最小SDK为18呢? - jpardogo
在一个较新的评论中,我说我将API级别提高到“android:minSdkVersion =”21“,以确保API级别/支持库不是问题。此外,我在我的问题中使用android:Theme.Material.Light而不是Theme.AppCompat.Light.NoActionBar。我会删除该评论,以免引起混淆。 - code monkey
尝试按照我说的做,但不要使用appcompat,应该可以工作。在你的xml中使用noactionbar主题和工具栏进行相同的过程。 - jpardogo

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