2013-06-20 15 views
7

Come ottengo il colore di sfondo di una TextView?Come si ottiene il colore di sfondo di una TextView?

Quando premo il TextView, voglio cambiare il colore di sfondo in base al colore di sfondo che è in uso.

TextView non dispone di un metodo come:

getBackgroundResource() 

Edit: preferirei ottenere il resid del colore di sfondo.

+0

Oppure sto cercando un po 'attraverso internet ma sembra che non ci sia modo di ottenere tale id da un colore definito xml. Probabilmente dovresti cambiare la tua app e gestire i colori dello sfondo a livello di codice, magari mantenendo traccia di cambiamenti di colore durante gli eventi onClick. – Rob013

risposta

13

Se si desidera ottenere il codice colore dello sfondo provare questo:

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

modifico la mia domanda: come ottengo da questa la resId del colore? – OrSmolnik

+0

Ok modifico la risposta ora –

+0

ho provato questo, ma dopo la prima riga nella tua risposta ottengo cd è nullo – OrSmolnik

0

RISPOSTA:

non possiamo usare i const come Color.Red o Color.white.

abbiamo bisogno di capire in su come il

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

rappresentarlo e abbiamo la falsa carta d'identità del colore

0

ColorDrawable.getColor() funziona solo con livello di API superiore a 11, in modo da poter utilizzare questo codice per supportarlo dall'inizio. Sto usando la riflessione di sotto del livello di 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

Se si utilizza AppCompat uso questo:

ViewCompat.getBackgroundTintList(textView).getDefaultColor(); 

Nota a margine: attenzione se si esegue il cast a ColorDrawable, perché può lanciare un ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable.

Problemi correlati