2013-06-20 142 views
7

如何獲得TextView的背景顏色?如何獲取TextView的背景顏色?

當我按下TextView時,我想根據使用中的背景顏色更改背景顏色。

TextView中沒有一個方法,如:

getBackgroundResource() 

編輯: 我寧願讓背景色的渣油。

+0

或者我通過互聯網尋找一點點,但它似乎沒有辦法從xml定義的顏色得到這樣的id。可能你應該改變你的應用程序並以編程方式管理背景顏色,也許在onClick事件中保留一些顏色變化。 – Rob013

回答

13

如果你想獲得背景的顏色代碼試試這個:

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

我編輯我的問題:我如何從這種顏色的resId? – OrSmolnik

+0

好吧,我現在編輯答案 –

+0

我試過這個,但在你的回答中的第一行之後,我得到cd是空的 – OrSmolnik

0

答:

我們不能使用consts像color.red或color.white。

我們需要弄清楚它的

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

如何代表它和我們有顏色的假身份證

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

如果您正在使用AppCompat使用這樣的:

ViewCompat.getBackgroundTintList(textView).getDefaultColor(); 

旁註:要小心,如果你投以ColorDrawable,因爲它可以拋出一個ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable