14

如何获取 TextView 的背景颜色?

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

TextView 没有这样的方法:

getBackgroundResource()

编辑:我更愿意获取背景颜色的 resId。

4

5 回答 5

19

如果您想获取背景的颜色代码,请尝试以下操作:

if (textView.getBackground() instanceof ColorDrawable) {
    ColorDrawable cd = (ColorDrawable) textView.getBackground();
    int colorCode = cd.getColor();
}
于 2013-06-20T21:36:39.243 回答
1

如果你正在AppCompat使用这个:

ViewCompat.getBackgroundTintList(textView).getDefaultColor();

旁注:如果你投到要小心ColorDrawable,因为它可以抛出一个ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable

于 2017-09-12T13:01:40.743 回答
1

在科特林:

    val cd = view.background as ColorDrawable
    val colorCode = cd.color
于 2019-12-18T13:10:04.960 回答
0

回答:

我们不能使用像 color.red 或 color.white 这样的常量。

我们需要弄清楚如何

int intID = (ColorDrawable) holder.tvChoose.getBackground().getColor();

代表它,我们有颜色的假 ID

于 2013-06-20T22:40:22.610 回答
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;
    }
于 2015-05-28T07:18:58.690 回答