簡體   English   中英

動態更改導航視圖項目顏色Android

[英]Change Navigation View Item Color Dynamically Android

我想構建一個導航抽屜,其中每個項目都有不同的選擇顏色(圖標色調和文本顏色),因為谷歌游戲商店有:

我不確定他們是如何解決這個問題的,我認為他們使用不同的活動和不同的抽屜。 我想使用片段,我想更改圖標色調和文本顏色。 任何想法我怎么能做到這一點? 我正在使用谷歌的設計支持庫和帶有導航視圖的抽屜布局。

使用app:itemIconTintNavigationView的圖標和使用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"/>

如果動態地用編程方式表示你可以試試這個:

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

因此,您可以為白天或夜晚等不同設置定義多種顏色。

Finllay我得到了答案,

您必須將顏色文件中的colorAccent更改為您想要的顏色:

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

這個解決方案對我有用

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

對那些懶惰的人來說,有一個更簡單的選擇。

TL; DR:只需創建一個新的stylecolorPrimary就是你想要的顏色,然后將NavigationViewtheme設置為這種新style

只需制作一種新style

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

style將自動從您的基本theme繼承(在我的情況下,它是AppTheme.NoActionBar )然后您只需要使用您想要的顏色設置colorPrimary

然后你只需要將NavigationViewtheme為:

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

您可以使用以下方式以編程方式執行此操作

其中item<\/code>是不需要着色的 MenuItem。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM