我如何获得TextView的背景颜色?

我如何获得TextView的背景颜色?

当我按下TextView时,我想根据使用的背景颜色来改变背景颜色。

TextView没有如下的方法:

getBackgroundResource() 

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

Solutions Collecting From Web of "我如何获得TextView的背景颜色?"

如果你想获得背景的颜色代码,试试这个:

 if (textView.getBackground() instanceof ColorDrawable) { ColorDrawable cd = (ColorDrawable) textView.getBackground(); int colorCode = cd.getColor(); } 

回答:

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

我们需要弄清楚如何

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

代表它,我们有颜色的假身份证

ColorDrawable.getColor()只能用于11以上的API级别,所以你可以使用这段代码来支持它从开始。 我正在使用低于API级别11的reflection。

  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; } 

如果你正在使用AppCompat使用这个:

 ViewCompat.getBackgroundTintList(textView).getDefaultColor(); 

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

我曾经使用这个代码来做。

 myTextView.setBackgroundColor(colorcodehere); 

至于获取背景颜色,我在这个StackOverflow 后find了一些合适的选项