NavigationView更改菜单icon和title颜色变化效果

NavigationView menu默认icon和title会随着菜单状态改变而改变,选择某个菜单后再次打开侧边菜单后会发现该菜单的icon和title会变成应用的主颜色,其他菜单项仍然为黑色。

选中的菜单icon和title会变成应用的主颜色

如果想关闭系统默认的这个效果,有两种方式:

1. XML布局文件设置
 <android.support.design.widget.NavigationView
        android: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

要自定义BottomNavigationView的样式,可以按照以下步骤: 1. 在布局文件中添加BottomNavigationView: ```xml <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" app:menu="@menu/bottom_navigation_menu" /> ``` 2. 创建一个menu文件,定义底部导航栏的菜单项: ```xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/navigation_home" android:icon="@drawable/ic_home" android:title="@string/home" app:showAsAction="ifRoom" /> <item android:id="@+id/navigation_dashboard" android:icon="@drawable/ic_dashboard" android:title="@string/dashboard" app:showAsAction="ifRoom" /> <item android:id="@+id/navigation_notifications" android:icon="@drawable/ic_notifications" android:title="@string/notifications" app:showAsAction="ifRoom" /> </menu> ``` 3. 在代码中获取BottomNavigationView的实例,然后进行自定义样式的设置: ```java BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation); bottomNavigationView.setItemIconTintList(null); // 取消图标着色 bottomNavigationView.setItemTextColor(ColorStateList.valueOf(Color.parseColor("#000000"))); // 设置文字颜色 bottomNavigationView.setBackgroundColor(Color.parseColor("#FFFFFF")); // 设置背景颜色 ``` 以上就是自定义BottomNavigationView样式的基本步骤,你可以根据需要自行修改样式。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值