设置自定义背景颜色后,浮动操作按钮背景颜色在禁用时不会更改

Floating Action Button background color does not change on disabling when custom background color is set

在我的应用程序中,我想在某些情况下禁用 FAB。但是,当 FAB 具有自定义 backgroundTint 时,该 FAB 的背景颜色保持不变(不会更改为禁用的 FAB 背景颜色)。 FAB被禁用但颜色没有改变。

这是一个例子: 布局文件

<com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/deleteButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_baseline_clear_24"
                app:tint="@color/white"
                app:backgroundTint="@color/darkgray_02"
                android:layout_margin="10dp"/>

这是代码:

binding.deleteButton.isEnabled = false

这里是有相应代码的图片

答: isEnabled = false, 无自定义颜色

B: isEnabled = false, app:backgroundTint="@color/darkgray_02"

有没有办法在设置FAB自定义颜色的同时关闭FAB,让我关闭FAB时颜色变成默认的FAB禁用颜色?

好的,我明白了。原来还有其他帖子。

要使 FAB 具有多种状态(启用和禁用),您需要设置 ColorStateList 而不是单一颜色。 所以我创建了一个 xml: drawable/fab_custom_style.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
    <item android:color="@color/darkgray_02"/>
</selector>

并设置 backgroundTint 以使用此 xml 的选择器:

app:backgroundTint="@drawable/fab_custom_style.xml"

现在FAB有禁用和启用两种状态。

对于禁用的 FAB,我使用 FAB 的标准禁用颜色 = "?attr/colorOnSurface"(在此处找到:https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/floatingactionbutton/res/color/mtrl_fab_bg_color_selector.xml

对于启用的 FAB,我使用自定义颜色:“@color/darkgray_02”

抱歉来晚了。 我用这种方式更改 FAB 背景颜色:

  1. 我们知道 FAB 背景是可绘制的。

  2. 您可以这样做,而不是仅仅为了更改背景颜色而创建可绘制对象

    yourFabButton.getBackground().setTint(getContext().getColor(R.color.colorPrimary));