Google Playストアと同じように、各アイテムの選択色(アイコンの色合いとテキストの色)が異なるナビゲーションドロワーを作成したいと思います。
彼らがこれをどのように解決したのかはわかりませんが、引き出しごとに異なるアクティビティを使用していると思います。フラグメントを使用し、アイコンの色合いとテキストの色を変更したい。どうすればこれを行うことができますか?私は、Googleのデザインサポートライブラリと、そこにナビゲーションビューがあるドロワーレイアウトを使用しています。
使用する app:itemIconTint
をNavigationView
でアイコンに使用し、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"/>
動的にプログラム的に意味する場合は、これを試すことができます:
// 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);
したがって、日や夜などのさまざまな設定に対して複数の色を定義できます。
<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:style
を目的の色にして新しいcolorPrimary
を作成し、NavigationView
のtheme
をこの新しいstyle
になります。
新しいstyle
を次のように作成してください:
<style name="AppTheme.NoActionBar.NavigationView">
<item name="colorPrimary">@color/myDesiredColor</item>
</style>
このstyle
は自動的にベースから継承しますtheme
(私の場合はAppTheme.NoActionBar
)次に、colorPrimary
を目的の色に設定するだけです。
次に、NavigationView
の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" />
Finllay私は答えを得ました、
色ファイルのcolorAccentを、希望する色に変更する必要があります。
<color name="colorAccent">whichever color required</color>
この解決策は私のために働いた