16

我想构建一个导航抽屉,其中每个项目都有不同的选择颜色(图标色调和文本颜色),因为谷歌游戏商店有:

在此处输入图像描述

我不确定他们是如何解决这个问题的,我认为他们使用不同的活动和不同的抽屉。我想使用片段,我想更改图标色调和文本颜色。任何想法我怎么能做到这一点?我正在使用谷歌的设计支持库和带有导航视图的抽屉布局。

4

6 回答 6

38

用于app:itemIconTint您的NavigationViewfor 图标并app:itemTextColor用于 textColors

样本 :

drawable/navigation_text_color

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- This is used when the Navigation Item is checked -->
    <item android:color="#009688" android:state_checked="true" />
    <!-- This is the default text color -->
    <item android:color="#E91E63" />
</selector>

layout

<android.support.design.widget.NavigationView
       .
       .
       app:itemTextColor="@drawable/navigation_text_color"/>
于 2015-06-22T09:44:02.640 回答
6

如果通过动态你的意思是编程你可以试试这个:

// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] states = new int[][]{
        new int[]{-android.R.attr.state_checked},  // unchecked
        new int[]{android.R.attr.state_checked},   // checked
        new int[]{}                                // default
};

// Fill in color corresponding to state defined in state
int[] colors = new int[]{
        Color.parseColor("#747474"),
        Color.parseColor("#007f42"),
        Color.parseColor("#747474"),
};

ColorStateList navigationViewColorStateList = new ColorStateList(states, colors);

// apply to text color
navigationView.setItemTextColor(navigationViewColorStateList);

// apply to icon color
navigationView.setItemIconTintList(navigationViewColorStateList);

因此,您可以为不同的设置(如白天或夜晚)定义多种颜色。

于 2016-03-26T12:44:33.383 回答
1

您可以使用以编程方式执行此操作

MenuItemCompat.setIconTintMode(item, PorterDuff.Mode.DST)

item您不需要着色的 MenuItem在哪里。

于 2022-01-25T10:37:27.310 回答
0

对于懒惰的人来说,有一个更简单的选择。

TL;DR:只需style使用colorPrimary您想要的颜色创建一个新的,然后将NavigationView'stheme设置为这个新的style

只需新建一个style

<style name="AppTheme.NoActionBar.NavigationView">
    <item name="colorPrimary">@color/myDesiredColor</item>
</style>

style将自动从您的基础继承theme(在我的情况下是AppTheme.NoActionBar),然后您只需设置colorPrimary所需的颜色。

然后你只需将NavigationView's设置theme为:

android:theme="@style/AppTheme.NoActionBar.NavigationView"

在:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_menu_test"
    app:menu="@menu/main_drawer"
    android:theme="@style/AppTheme.NoActionBar.NavigationView" /> 
于 2017-10-26T23:42:25.063 回答
0

芬莱我得到了答案,

您必须将颜色文件中的 colorAccent 更改为您想要的颜色:

  <color name="colorAccent">whichever color required</color>

这个解决方案对我有用

于 2016-03-02T09:07:43.087 回答
0
    <android.support.design.widget.NavigationView
           .
           .
           app:itemIconTint="@color/your_selector_file_name" // for Icon
        app:itemTextColor="@color/your_selector_file_name" // for text
/>

添加到@DAVOOD 所说的内容。下面的颜色选择器对我有用。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- This is used when the Navigation Item is checked -->
        <item android:color="@color/tenoBrandColor" android:state_pressed="true" />
        <!-- This is the default text color -->
        <item android:color="@color/textprimary" />
</selector>
于 2017-07-27T11:47:36.333 回答