setBackgroundTintList не применяется напрямую
Я применяю метод setBackgroundTintList() в своем классе AppCompatButton следующим образом:
applyTintColor(this.appCompatButton, R.drawable.button_orange_color_state);
Метод applyTintColor:
public void applyTintColor(@NonNull View view, @DrawableRes int color) {
ColorStateList colorStateList = ContextCompat.getColorStateList(view.getContext(), color);
ViewCompat.setBackgroundTintList(view, colorStateList);
}
Мой файл button_orange_color_state.xml.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Disable background -->
<item android:color="@color/brand_secondary"
android:state_enabled="false"/>
<!-- Default background -->
<item android:color="@color/orange"/>
</selector>
Проблема: после применения метода applyTintColor кнопка принимает форму с прозрачным белым цветом по умолчанию вместо моего оранжевого цвета. Но я заметил, что когда я нажимаю кнопку, кнопка правильно принимает цвет состояния отключения, затем после повторного включения кнопки цвет становится оранжевым. Единственный, но грязный способ, который я нашел до сих пор, - это добавить следующий фрагмент кода в конец моего applyTintColor:
view.setEnabled(!view.isEnabled());
view.setEnabled(!view.isEnabled());
Таким образом, кнопка напрямую учитывает хороший оранжевый цвет.
Поэтому мне интересно, есть ли у кого-то лучшая идея, чтобы сделать вещи лучше здесь?
1 ответ
Для использования в будущем, если вид уже выложен, после view.setBackgroundTintList(tint)
, ты можешь позвонить view.refreshDrawableState()
,