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

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

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

TextView没有如下的方法:

getBackgroundResource() 

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

  • 文字没有椭圆化
  • Android:ellipsize结尾 - 省略号后的额外字符
  • Android:在左侧alignment文本,并在父视图中对文本视图进行居中
  • 在android中textview.getLineCount总是0
  • Android透明文本
  • 资源ID不能是textAppearance属性中的空string(“文本”中值为“?”)
  • Android - 更改操作栏标题文字颜色
  • Android - 更改操作栏标题文本颜色
  • 如果你想获得背景的颜色代码,试试这个:

     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了一些合适的选项