Цвет фона плавающей кнопки действия не меняется при отключении, когда задан пользовательский цвет фона

#android #android-studio #kotlin #material-design #floating-action-button

#Android #android-studio #kotlin #материал-дизайн #плавающая кнопка действия

Вопрос:

В моем приложении я хочу отключить 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
 

Здесь изображение с соответствующим кодом

A: IsEnabled = false, нет пользовательского цвета

B: IsEnabled = false, app:backgroundTint=»@color / darkgray_02″

введите описание изображения здесь

Есть ли способ установить пользовательский цвет для FAB и одновременно отключить FAB, чтобы цвет менялся на цвет, отключенный по умолчанию, когда я отключаю FAB?

Ответ №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. Мы знаем, что потрясающий фон можно рисовать.
  2. вместо того, чтобы создавать чертеж только для изменения цвета фона, вы могли бы сделать это

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