如何获取TextView的背景颜色?

时间:2013-06-20 21:31:28

标签: android textview

如何获取TextView的背景颜色?

当我按TextView时,我想根据正在使用的背景颜色更改背景颜色。

TextView没有以下方法:

getBackgroundResource()

编辑: 我宁愿得到背景颜色的resId。

5 个答案:

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