【问题标题】:Floating Action Button background color does not change on disabling when custom background color is set设置自定义背景颜色时,浮动操作按钮背景颜色在禁用时不会更改
【发布时间】:2021-05-10 08:10:24
【问题描述】:

在我的应用程序中,我想在某些情况下禁用 FAB。但是当 FAB 具有自定义背景色时,该 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,没有自定义颜色

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

有没有办法为FAB设置自定义颜色并同时禁用FAB,以便在禁用FAB时颜色变为默认的FAB禁用颜色?

【问题讨论】:

    标签: android android-studio kotlin material-design floating-action-button


    【解决方案1】:

    好的,我想通了。事实证明,还有其他帖子。

    要拥有 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”

    【讨论】:

      【解决方案2】:

      抱歉迟到了。 我用这种方式改变 FAB 背景颜色:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        相关资源
        最近更新 更多