为什么 Material FAB 在禁用状态下不能改变颜色?

6

我正在禁用Material浮动操作按钮,但是当将disabled设置为true时,颜色没有改变。我以为Material有一个FAB主题,当禁用时应该变成浅灰色。我不想每次启用/禁用时都添加更改背景的代码。

我目前使用的Material版本是:1.1.0

在代码中,我只需通过fab.isEnabled = false来禁用fab。

这是xml:

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/save_reservation_fab"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/keyline_2"
                app:backgroundTint="@color/color_primary"
                android:src="@drawable/ic_save_black_72dp"
                app:tint="@color/color_on_primary"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>

这是禁用/启用的fab(浮动操作按钮)的样子:

输入图像描述

它应该看起来像这样:

输入图像描述

2个回答

4
我猜测这是罪魁祸首:
app:backgroundTint="@color/color_primary"
这将使您的FAB的颜色受到影响,无论其状态如何。
您可以通过将色调设置为ColorStateList而不是原始颜色值来解决此问题。也就是说,在res/color/目录中创建一个名为fab_color.xml的文件,并包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="your gray here"/>
    <item android:color="@color/color_primary"/>
</selector>

将你的色调改为这个:

app:backgroundTint="@color/fab_color"

或者,您可以调整Activity的主题,使FAB的默认颜色是您想要的颜色(@color/color_primary),然后完全删除app:backgroundTint属性。


3

版本1.2.0引入了FloatingActionButton中支持启用/禁用状态的功能。

现在默认样式支持禁用状态,且禁用时背景颜色基于colorOnSurface进行设置:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorSecondary" android:state_enabled="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>

在这里输入图片描述在这里输入图片描述

您可以使用app:backgroundTint属性来更改它,使用自定义选择器或以下方法:

  <com.google.android.material.floatingactionbutton.FloatingActionButton
      android:theme="@style/ThemeOverlay.Custom.FloatingActionButton"
      ../>

使用:

<style name="ThemeOverlay.Custom.FloatingActionButton" parent="">
    <item name="colorOnSurface">@color/....</item>
</style>

在材料网站上奇怪的是,没有显示禁用状态,所以我认为这不受支持。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接