Android Lollipop Material Design溢出菜单图标颜色

时间:2014-11-18 14:54:52

标签: java android xml android-5.0-lollipop material-design

我在Nexus 7上尝试新的Material Design,并且有以下奇怪的行为。第一个应用程序启动时,“溢出菜单”图标的颜色不同。

我更改了android:textColorPrimary颜色并阅读了此tutorial

  1. 首次发布应用:first app launch

  2. 第二次应用启动:enter image description here

  3. 如您所见,首次启动时未设置主要文本颜色的颜色。仅在我按下主页按钮并重新启动应用程序时才会设置。这是我的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"并且不想使用支持库。

5 个答案:

答案 0 :(得分:2)

我在PreferenceActivity设备上运行无法使用appcompat-v7库的LOLLIPOP时遇到了同样的问题。首次打开此活动时,溢出图标始终为白色,完全忽略android:textColorPrimaryandroid:colorControlNormal。然而,后续运行或方向更改会导致正确着色。

我创建了一个可以帮助你缓解这个问题的要点。代码将全局布局观察器绑定到工具栏,当它找到溢出图标时,它会替换它并取消绑定观察者。所以不要在你不希望出现溢出图标的地方使用它,因为在这种情况下观察者不会受到限制。

链接到要点:https://gist.github.com/consp1racy/4b640679de553fdb3046

答案 1 :(得分:1)

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

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

在某些情况下,辅助颜色设置为原色。我不知道为什么。

答案 2 :(得分: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

答案 3 :(得分:1)

如果您想在21之前的设备中使用材料设计,则需要扩展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" />

你有可选的attrs来定义主题和popupTheme:

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。

答案 4 :(得分:1)

Just add android:theme="@style/ThemeOverlay.AppCompat.Dark"to the Toolbar

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

overflow menu icon will be white now :)