2013-06-20 11 views
7

Jak mogę uzyskać kolor tła TextView?Jak uzyskać kolor tła TextView?

Po naciśnięciu przycisku TextView chcę zmienić kolor tła zgodnie z używanym kolorem tła.

TextView nie ma metody, takie jak:

getBackgroundResource() 

EDIT: wolałbym dostać pozost koloru tła.

+0

Albo szukam trochę przez Internet, ale wydaje się, że nie ma sposobu, aby uzyskać taki id od koloru zdefiniowanego xml. Prawdopodobnie powinieneś zmienić program i programowo zarządzać kolorami tła, być może śledząc zmiany kolorów podczas zdarzeń onClick. – Rob013

Odpowiedz

13

Jeśli chcesz otrzymać kod koloru tła spróbuj tego:

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

Edytuję moje pytanie: w jaki sposób uzyskuję z tego resId koloru? – OrSmolnik

+0

OK, będę edytować odpowiedź teraz –

+0

próbowałem tego, ale po pierwszym wierszu w twojej odpowiedzi otrzymałem cd is null – OrSmolnik

0

ODPOWIEDŹ:

cant używamy consts jak color.red lub color.white.

musimy zorientować go jak

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

reprezentowania go i mamy fałszywy identyfikator koloru

0

ColorDrawable.getColor() będzie działać tylko z poziomu API powyżej 11, więc można użyć tego kodu wspierać go od początku. używam odbicie poniżej poziomu 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

Jeśli używasz AppCompat użyj:

ViewCompat.getBackgroundTintList(textView).getDefaultColor(); 

uwaga Side: być ostrożnym, jeśli oddanych do ColorDrawable, bo można rzucić ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable.