Android 禁用时,材料工厂为什么不更改颜色?
我正在禁用“材质浮动”操作按钮,但当“禁用”设置为“真”时,颜色不会改变。我认为材料有一个晶圆厂的主题,当禁用它应该变成浅灰色。我不想在每次启用/禁用背景时添加代码来更改背景 我目前使用的是材料版本:1.1.0 在代码中,我只是通过Android 禁用时,材料工厂为什么不更改颜色?,android,kotlin,floating-action-button,material-components-android,Android,Kotlin,Floating Action Button,Material Components Android,我正在禁用“材质浮动”操作按钮,但当“禁用”设置为“真”时,颜色不会改变。我认为材料有一个晶圆厂的主题,当禁用它应该变成浅灰色。我不想在每次启用/禁用背景时添加代码来更改背景 我目前使用的是材料版本:1.1.0 在代码中,我只是通过fab.isEnabled=false将fab设置为禁用 这是xml <com.google.android.material.floatingactionbutton.FloatingActionButton
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"/>
这就是禁用/启用的晶圆厂的外观:
它应该是这样的:
我怀疑这就是罪魁祸首:
无论晶圆厂的状态如何,这都将为其着色
您可以通过将色调设置为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>
或者,您可以调整活动的主题,使FAB的默认颜色为您想要的颜色(@color/color\u primary
),然后完全删除应用程序:backgroundTint
属性。版本1.2.0
支持浮动操作按钮中的启用/禁用状态
现在,默认样式支持禁用状态,并且基于禁用时的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="@color/fab_color"
<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>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:theme="@style/ThemeOverlay.Custom.FloatingActionButton"
../>
<style name="ThemeOverlay.Custom.FloatingActionButton" parent="">
<item name="colorOnSurface">@color/....</item>
</style>