NavigationView menu默認icon和title會隨著菜單狀態改變而改變,選擇某個菜單后再次打開側邊菜單后會發現該菜單的icon和title會變成應用的主顏色,其他菜單項仍然為黑色。
如果想關閉系統默認的這個效果,有兩種方式:
1. XML布局文件設置
<android.support.design.widget.NavigationViewandroid:id="@+id/mainNavView"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:itemTextColor="@color/colorPrimary" app:itemIconTint="@color/colorPrimary" app:menu="@menu/main_drawer"> </android.support.design.widget.NavigationView>
代碼中的app:itemTextColor=”@color/colorPrimary”設置菜單title的顏色,app:itemIconTint=”@color/colorPrimary”設置菜單icon的顏色,如果icon的顏色設為null,即app:itemIconTint=”@null”,則icon的顏色還是會隨菜單的狀態改變而改變。
2.代碼中設置
mainNavView.setItemTextColor(null);
mainNavView.setItemIconTintList(null);
這樣設置后icon和title的顏色就是默認的了,比如說你的icon原圖是紅色的,那么顯示就是紅色,而title默認都是黑色的。
如果你想自定義系統默認的顏色變化,也有如下兩種方式:
1.XML資源文件設置
新建一個selector為根標簽的資源文件,名稱姑且為nav_menu_text_color,代碼如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:color="@color/checked_color"/><item android:state_checked="false" android:color="@color/uncheck_color"/> </selector>
然后在java代碼中將該資源文件設置為icon和title的顏色即可。
mainNavView.setItemTextColor(resources.getColorStateList(R.drawable.nav_menu_text_color, null)); mainNavView.setItemIconTintList(resources.getColorStateList(R.drawable.nav_menu_text_color, null));
2.代碼中設置
int[][] states = new int[][]{
new int[]{ -android.R.attr.state_checked}, new int[]{android.R.attr.state_checked} }; int[] colors = new int[]{ getResources().getColor(R.color.checked_color), getResources().getColor(R.color.uncheck_color) }; ColorStateList csl = new ColorStateList(states, colors); mainNavView.itemTextColor = csl mainNavView.itemIconTintList = csl
這樣設置完成后,選中的菜單icon和title顏色為checked_color,可以隨意設置你想要的任何顏色,未選中則是uncheck_color