浮动操作按钮(FAB)tint属性失效:无法修改图标颜色
解决FAB图标Tint属性不生效的问题
我太懂这种明明按设置了属性却没效果的烦躁了——你已经给FAB和vector图标都加了白色tint,结果图标还是顽固地显示黑色,对吧?咱们来快速搞定这个问题:
核心问题:Material FAB的图标颜色控制用错了属性
你用的是com.google.android.material.floatingactionbutton.FloatingActionButton,这是Material Design组件库的控件,它的图标颜色不遵循原生Android的android:tint属性,而是要用Material专属的app:tint来控制。
两步解决法
1. 把FAB的tint换成app命名空间的版本
修改你的FAB XML代码,将android:tint="@color/white"替换为app:tint="@color/white":
<com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/createPostBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:backgroundTint="#006993" android:clickable="true" android:focusable="true" android:src="@drawable/ic_textpost" app:tint="@color/white" <!-- 替换成这个 --> app:layout_constraintBottom_toTopOf="@+id/add_btn" app:layout_constraintEnd_toEndOf="@+id/add_btn" />
2. 清理Vector图标里的硬编码颜色
你的ic_textpost.xml里每个path都硬编码了android:fillColor="@android:color/white",还加了android:tint,这会导致外部的tint无法正常覆盖。建议把图标恢复成默认黑色填充,去掉自身的tint属性,这样外部的tint才能完全生效:
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:fillColor="@android:color/black" android:pathData="M17,19.22H5V7h7V5H5C3.9,5 3,5.9 3,7v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-7h-2V19.22z"/> <path android:fillColor="@android:color/black" android:pathData="M19,2h-2v3h-3c0.01,0.01 0,2 0,2h3v2.99c0.01,0.01 2,0 2,0V7h3V5h-3V2z"/> <path android:fillColor="@android:color/black" android:pathData="M7,9h8v2h-8z"/> <path android:fillColor="@android:color/black" android:pathData="M7,12l0,2l8,0l0,-2l-3,0z"/> <path android:fillColor="@android:color/black" android:pathData="M7,15h8v2h-8z"/> </vector>
为什么这样有效?
- Material组件的FAB优先读取
app命名空间的属性,原生android:tint会被忽略 - Vector图标如果硬编码了填充色,外部tint只能和它混合,无法完全替换成你要的颜色;改成默认黑色后,tint才能完全覆盖,显示你想要的白色
这样修改后,你的FAB图标应该就能正常显示白色了!
内容的提问来源于stack exchange,提问作者Devin S




