动态更改导航视图项目颜色Android

时间:2015-06-21 18:21:46

标签: android drawerlayout androiddesignsupport navigationview

我想构建一个导航抽屉,其中每个项目都有不同的选择颜色(图标色调和文字颜色),如Google Play商店所示:

enter image description here

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

5 个答案:

答案 0 :(得分:36)

app:itemIconTint中使用NavigationView作为图标,并使用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"/>

答案 1 :(得分:5)

如果动态地用编程方式表示你可以试试这个:

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

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

答案 2 :(得分:0)

Finllay我得到了答案,

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

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

此解决方案适合我

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

答案 4 :(得分:0)

对于那些懒惰的人来说,这是一个更简单的选择。

TL; DR:只需创建一个新的stylecolorPrimary是您想要的颜色,然后设置NavigationView&#39; s {{ 1}}成为新的theme

只需创建一个新的style

style

<style name="AppTheme.NoActionBar.NavigationView"> <item name="colorPrimary">@color/myDesiredColor</item> </style> 会自动从您的基地style继承(在我的情况下为theme),然后您只需将AppTheme.NoActionBar设置为所需的颜色即可。

然后您只需将colorPrimary&#39; s NavigationView设置为:

theme

在:

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