设置自定义背景颜色后,浮动操作按钮背景颜色在禁用时不会更改
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 背景颜色:
我们知道 FAB 背景是可绘制的。
您可以这样做,而不是仅仅为了更改背景颜色而创建可绘制对象
yourFabButton.getBackground().setTint(getContext().getColor(R.color.colorPrimary));
在我的应用程序中,我想在某些情况下禁用 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 背景颜色:
我们知道 FAB 背景是可绘制的。
您可以这样做,而不是仅仅为了更改背景颜色而创建可绘制对象
yourFabButton.getBackground().setTint(getContext().getColor(R.color.colorPrimary));