我正在对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());
这样,按钮就直接考虑到了好的橙色。
所以我想知道是否有人有更好的主意来改善这里的情况?
最佳答案
为了以后的参考,如果视图已经布局好了,在view.setBackgroundTintList(tint)
之后,您可以调用view.refreshDrawableState()
。