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(),

Другие вопросы по тегам