导航抽屉(Navigation Drawer)图标初始颜色修改及变粉色问题排查
嘿,我来帮你搞定这个头疼的问题!这种图标颜色“偷偷”变化的情况,大概率是Android主题/样式的默认属性在起作用,而不是你直接在代码里写了粉色设置。咱们一步步排查解决:
核心原因
NavigationView的图标颜色默认会继承App主题里的两个关键属性:
- 未选中状态:
colorControlNormal(部分主题下也会关联android:textColorSecondary) - 选中状态:
colorAccent
如果你的主题里这两个属性有一个是粉色,图标就会自动被tint覆盖成粉色——哪怕你原本的图标是黑色的。
快速解决办法
方法1:直接给NavigationView指定图标颜色
最简单的方式是在布局文件的NavigationView标签里添加itemIconTint属性,强制设置图标颜色:
<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_main" app:menu="@menu/activity_main_drawer" app:itemIconTint="@color/your_black_color" /> <!-- 这里替换成你需要的黑色值 -->
如果需要区分选中/未选中的不同颜色,可以创建一个颜色状态列表文件:
- 在
res/drawable下新建nav_icon_tint.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/selected_color" android:state_checked="true"/> <!-- 选中时的颜色 --> <item android:color="@color/black" /> <!-- 未选中时的黑色 --> </selector>
- 然后在NavigationView里引用:
app:itemIconTint="@drawable/nav_icon_tint"
方法2:修改全局主题属性
如果你想让整个App的控件颜色统一,而不是单独改NavigationView,可以修改styles.xml里的App主题:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 其他主题属性... --> <item name="colorControlNormal">@color/black</item> <!-- 未选中图标颜色 --> <item name="colorAccent">@color/your_desired_selected_color</item> <!-- 替换掉原来的粉色选中色 --> </style>
方法3:检查动态代码设置
虽然你说找不到,但还是建议扫一眼Activity里的代码,有没有类似这样的动态设置:
NavigationView navView = findViewById(R.id.nav_view); navView.setItemIconTintList(ColorStateList.valueOf(getResources().getColor(R.color.pink)));
如果有的话,把颜色值改成你需要的黑色即可。
额外提示
如果你想让图标完全保持原本的黑色(不被tint覆盖),可以把itemIconTint设置为null:
app:itemIconTint="@null"
这样NavigationView就不会对图标进行颜色过滤,直接显示图标本身的颜色啦。
内容的提问来源于stack exchange,提问作者Andressa Pinheiro
相关产品推荐
相关产品推荐

