如何获取TextView的背景颜色?
当我按TextView时,我想根据正在使用的背景颜色更改背景颜色。
TextView没有以下方法:
getBackgroundResource()
编辑: 我宁愿得到背景颜色的resId。
答案 0 :(得分:16)
如果你想获得背景的颜色代码,试试这个:
if (textView.getBackground() instanceof ColorDrawable) {
ColorDrawable cd = (ColorDrawable) textView.getBackground();
int colorCode = cd.getColor();
}
答案 1 :(得分:1)
如果您使用AppCompat
,请使用此选项:
ViewCompat.getBackgroundTintList(textView).getDefaultColor();
旁注:如果你转向ColorDrawable
,请小心,因为它可以抛出ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable
。
答案 2 :(得分:0)
<强>解答:强>
我们无法使用像color.red或color.white这样的结果。
我们需要弄清楚如何
int intID = (ColorDrawable) holder.tvChoose.getBackground().getColor();
代表它,我们有伪造的颜色ID
答案 3 :(得分:0)
ColorDrawable.getColor()
仅适用于11级以上的API级别,因此您可以使用此代码从头开始支持它。
我正在使用API级别11以下的反射。
public static int getBackgroundColor(TextView textView) {
Drawable drawable = textView.getBackground();
if (drawable instanceof ColorDrawable) {
ColorDrawable colorDrawable = (ColorDrawable) drawable;
if (Build.VERSION.SDK_INT >= 11) {
return colorDrawable.getColor();
}
try {
Field field = colorDrawable.getClass().getDeclaredField("mState");
field.setAccessible(true);
Object object = field.get(colorDrawable);
field = object.getClass().getDeclaredField("mUseColor");
field.setAccessible(true);
return field.getInt(object);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return 0;
}
答案 4 :(得分:0)
在科特林:
val cd = view.background as ColorDrawable
val colorCode = cd.color