如何在Android Navigation Drawer中设置自定义图标并解决图标变灰问题
嘿,这个问题我之前开发的时候也踩过坑!Navigation Drawer默认会给菜单图标统一应用着色(tint),所以哪怕你用的是彩色PNG,也会被自动染成灰色。下面几个实用的方法可以帮你搞定:
方法1:完全关闭默认着色
最简单的方式就是直接让NavigationView不对图标应用任何着色,只需要在布局文件的NavigationView标签里添加app:itemIconTint="@null"即可,这样图标就会显示它原本的彩色了。
示例代码:
<com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" app:itemIconTint="@null" /> <!-- 关键配置 -->
方法2:自定义统一着色(区分选中/未选中)
如果你不想完全关闭着色,而是希望所有图标统一使用指定的彩色,甚至区分选中和未选中状态的颜色,可以用颜色选择器来实现:
- 首先在
res/color目录下创建一个名为nav_icon_tint.xml的选择器文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态的颜色 --> <item android:color="@color/your_selected_color" android:state_checked="true" /> <!-- 未选中状态的颜色 --> <item android:color="@color/your_unselected_color" /> </selector>
- 然后在
NavigationView中引用这个选择器:
app:itemIconTint="@color/nav_icon_tint"
方法3:单独给某个菜单图标取消着色
如果只是特定的几个图标需要显示原本颜色,其他保持默认灰色,可以直接在对应的menu item里设置android:iconTint="@null":
<!-- 在res/menu/activity_main_drawer.xml中修改目标item --> <item android:id="@+id/nav_special_item" android:icon="@drawable/your_colorful_icon" android:title="@string/special_menu_title" android:iconTint="@null" />
方法4:针对VectorDrawable的额外优化(可选)
如果你的图标是VectorDrawable格式,除了上面的方法,还可以在vector文件里直接设置tint="none"来避免被着色,但一般在布局或menu里设置会更灵活。
内容的提问来源于stack exchange,提问作者Shashi Patel
相关产品推荐
相关产品推荐

