我在应用程序周围使用了一个自定义进度条,它具有用于设置不确定颜色的属性。由于我正在使用支持库,我试图在旧的Android版本上使用进度条。
在attrs中我有类似的东西:
<declare-styleable name="TestView">
<attr name="testColor" format="color"/>
</declare-styleable>
声明视图时:
<com.TestView
....
app:testColor="#color"
/>
然后我的自定义视图是这样的:
public class TestView extends ProgressBar {
public TestView(Context context) {
super(context);
applyTint(Color.WHITE);
}
public TestView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TestView, 0, 0);
try {
applyTint(attributes.getColor(R.styleable.TestView_testColor, Color.WHITE));
} finally {
attributes.recycle();
}
}
public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, android.support.design.R.style.Base_Widget_AppCompat_ProgressBar);
TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TestView, 0, 0);
try {
applyTint(attributes.getColor(R.styleable.TestView_testColor, Color.WHITE));
} finally {
attributes.recycle();
}
}
private void applyTint(int color) {
if (Build.VERSION.SDK_INT >= 21) {
setIndeterminateTintList(ColorStateList.valueOf(color));
} else {
getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
}
我遇到的问题是,似乎在TestView实例之间以某种方式共享了颜色属性。 如何让每个视图保留自己的属性值?
后期编辑:似乎在Android 6上正常工作但在4.4.2上失败
答案 0 :(得分:0)
在https://stackoverflow.com/a/37434219/379865
得到了答案基本上我必须用:
更新我的色调应用代码if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(DrawableCompat.wrap(getIndeterminateDrawable()), color);
else {
DrawableCompat.wrap(getIndeterminateDrawable()).mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}