Я хочу изменить цвет FAB сканирования NFC, когда NFC не включен. Мне удалось успешно изменить цвет при запуске приложения, но если пользователь коснется FAB и включит NFC, цвет не изменится на основной цвет. В логах написано, что да, но изменений не происходит.
My minSdkVersion = 15
XML:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_scan_nfc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
app:backgroundTint="@color/colorPrimary"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="mini"
app:fab_colorNormal="@color/colorPrimary"
app:fab_colorPressed="@color/colorPrimaryDark"
app:fab_colorRipple="@color/colorAccent"
app:srcCompat="@drawable/ic_nfc_n" />
Котлин:
if (!isNFCEnabled) {
Log.d(TAG, "Change NFC fab colour to disabled.")
fab_scan_nfc.backgroundTintList = ColorStateList.valueOf(R.color.colorDisabled)
} else {
Log.d(TAG, "Change NFC fab colour to primary.")
fab_scan_nfc.backgroundTintList = ColorStateList.valueOf(R.color.colorPrimary)
}
Это то же самое, что и Java:
if (!isNFCEnabled) {
Log.d(TAG, "Change NFC fab colour to disabled.")
fab_scan_nfc.setBackgroundTintList = ColorStateList.valueOf(R.color.colorDisabled);
} else {
Log.d(TAG, "Change NFC fab colour to primary.")
fab_scan_nfc.setBackgroundTintList = ColorStateList.valueOf(R.color.colorPrimary);
}
В качестве побочного эффекта — когда код применяет отключенный цветовой оттенок фона, на FAB есть этот меньший кружок, который выглядит как сенсорный индикатор. Это как-то связано с использованием списка состояний цвета list?
ColorStateList.valueOf()
принимает фактическое значение цвета в качестве аргумента.R.color
— это идентификатор ресурса для цвета в ресурсах вашего приложения, а не значение цвета. ИспользуйтеContextCompat.getColor()
, чтобы получить фактическое значение. - person Mike M.   schedule 22.05.2017