2013-02-08 15 views
30

Desidero trovare il colore di sfondo di un layout dal mio codice. C'è un modo per trovarlo? qualcosa come linearLayout.getBackgroundColor()?Ottieni il colore di sfondo di un layout

+0

Dal momento che il fondo non può essere un colore, è possibile utilizzare linearLayout.getBackground() che darà tu un 'Drawable'. Non ci sono API per ottenere il colore di sfondo, in particolare. [Leggi di più nella documentazione per View] (http://developer.android.com/reference/android/view/View.html#getBackground%28%29) –

+0

Ma ho davvero bisogno di trovare il colore di un layout. Ci dovrebbe essere un altro modo! o è possibile ottenerlo da 'Drawable'? –

risposta

75

Questo può essere eseguito solo in API 11+ se lo sfondo è un colore solido.

  int color = Color.TRANSPARENT; 
      Drawable background = view.getBackground(); 
      if (background instanceof ColorDrawable) 
       color = ((ColorDrawable) background).getColor(); 
+0

Stavo andando a modificare la mia risposta e dire che in particolare potrebbe funzionare! Tuttavia, non sono sicuro del motivo per cui esiste una restrizione API 11+? 'ColorDrawable' sembra disponibile dall'API 1 e anche view.getBackground(). –

+0

Nevermind. Vedo che '.getColor' per ColorDrawable è stato aggiunto in API 11. –

+0

Puoi convertire il' Disegnabile' in 'Bitmap' e ottenere il primo pixel. 'int color = bitmap.getPixel (0, 0);' –

10

ColorDrawable.getColor() funziona solo con API di livello superiore a 11, in modo da poter utilizzare questo codice per sostenerlo dal livello API 1. Uso riflessione sotto il livello API 11.

public static int getBackgroundColor(View view) { 
     Drawable drawable = view.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; 
    } 
8

Per ottenere il colore di sfondo di un layout:

LinearLayout lay = (LinearLayout) findViewById(R.id.lay1); 
ColorDrawable viewColor = (ColorDrawable) lay.getBackground(); 
int colorId = viewColor.getColor(); 

se è RelativeLayout poi basta trovare il suo ID e utilizzare non oggetto invece di LinearLayout.

0

Il modo più semplice per farlo è:

view.getSolidColor(); 
0

modo breve e semplice:

int color = ((ColorDrawable)view.getBackground()).getColor(); 
Problemi correlati