2013-06-20 21 views
7

Wie bekomme ich die Hintergrundfarbe eines TextView?Wie bekomme ich die Hintergrundfarbe eines TextView?

Wenn ich TextView drücke, möchte ich die Hintergrundfarbe entsprechend der Hintergrundfarbe ändern, die verwendet wird.

Textview haben kein Verfahren wie:

getBackgroundResource() 

Edit: würde ich es vorziehen, die RESID der Hintergrundfarbe zu erhalten.

+0

Oder ich suche ein wenig durch das Internet, aber es scheint dort keine Möglichkeit, solche ID aus einer xml definierten Farbe zu bekommen. Wahrscheinlich sollten Sie Ihre App ändern und Hintergrundfarben programmgesteuert verwalten, indem Sie möglicherweise die Farbänderungen während onClick-Ereignissen nachverfolgen. – Rob013

Antwort

13

Wenn Sie Farbcode des Hintergrundes erhalten versuchen Sie dies:

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

Ich bearbeite meine Frage: Wie bekomme ich von diesem die resId der Farbe? – OrSmolnik

+0

Ok Ich werde die Antwort jetzt bearbeiten –

+0

Ich habe es versucht, aber nach der ersten Zeile in Ihrer Antwort bekomme ich CD ist null – OrSmolnik

0

ANTWORT:

wir die consts wie Color.red oder Color.White verwenden kann nicht.

brauchen wir, um einen Reim auf, wie die

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

es repräsentieren, und wir haben die gefälschte ID der Farbe

0

ColorDrawable.getColor() nur über 11 mit API-Ebene arbeiten, so dass Sie diesen Code verwenden können um es von Anfang an zu unterstützen. Ich bin mit Reflexion unter API-Ebene 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

Wenn Sie AppCompat Gebrauch verwenden diese:

ViewCompat.getBackgroundTintList(textView).getDefaultColor(); 

Exkurs: vorsichtig sein, wenn Sie ColorDrawable werfen, weil es kann eine ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable werfen.

Verwandte Themen