setBackgroundTintList不直接应用

时间:2016-03-20 13:34:34

标签: android appcompat-v7-r23

我在AppCompatButton类上应用方法setBackgroundTintList(),如下所示:

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 个答案:

答案 0 :(得分:1)

为了将来参考,如果视图已经布局,在view.setBackgroundTintList(tint)之后,您可以致电view.refreshDrawableState()