You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

浮动操作按钮(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

火山引擎 最新活动