web-dev-qa-db-ja.com

ナビゲーションビューのアイテムの色を動的に変更するAndroid

Google Playストアと同じように、各アイテムの選択色(アイコンの色合いとテキストの色)が異なるナビゲーションドロワーを作成したいと思います。

enter image description here

彼らがこれをどのように解決したのかはわかりませんが、引き出しごとに異なるアクティビティを使用していると思います。フラグメントを使用し、アイコンの色合いとテキストの色を変更したい。どうすればこれを行うことができますか?私は、Googleのデザインサポートライブラリと、そこにナビゲーションビューがあるドロワーレイアウトを使用しています。

16
vigonotion

使用する app:itemIconTintNavigationViewでアイコンに使用し、app:itemTextColor for 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"/>
36
DJafari

動的にプログラム的に意味する場合は、これを試すことができます:

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

したがって、日や夜などのさまざまな設定に対して複数の色を定義できます。

6
Robert
    <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>
0
Sagar Devanga

そこに怠惰なもののためのより簡単なオプションがあります。

TL; DR:styleを目的の色にして新しいcolorPrimaryを作成し、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" /> 
0
mFeinstein

Finllay私は答えを得ました、

色ファイルのcolorAccentを、希望する色に変更する必要があります。

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

この解決策は私のために働いた

0
Parth Anjaria