2013-02-08 33 views
30

Chcę znaleźć kolor tła układu z mojego kodu. Czy istnieje sposób, aby go znaleźć? coś w stylu linearLayout.getBackgroundColor()?Pobierz kolor tła układu

+0

Ponieważ tło może być kolor, można użyć linearLayout.getBackground(), które dadzą jesteś "Drawable". Nie ma żadnego API, aby uzyskać konkretny kolor tła. [Czytaj więcej w dokumentach do widoku] (http://developer.android.com/reference/android/view/View.html#getBackground%28%29) –

+0

Ale naprawdę muszę znaleźć kolor układu. Powinien być jakiś inny sposób! czy jest możliwe, aby uzyskać go z 'Drawable'? –

Odpowiedz

75

Można to osiągnąć tylko w interfejsie API 11+, jeśli tło ma jednolity kolor.

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

Chciałem tylko edytować moją odpowiedź i powiedzieć, że to może zadziałać! Jednak nie jestem pewien, dlaczego istnieje ograniczenie API 11+? 'ColorDrawable' wydaje się być dostępny od API 1, a także view.getBackground(). –

+0

Nieważne. Widzę, że '.getColor' dla ColorDrawable został dodany w API 11. –

+0

Możesz przekonwertować' Drawable' na 'Bitmap' i uzyskać pierwszy piksel. 'int color = bitmap.getPixel (0, 0);' –

10

ColorDrawable.getColor() działa tylko z poziomu API powyżej 11, więc można użyć tego kodu, aby wspierać go z poziomu API 1. Użyj refleksji poniżej poziomu 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

Aby uzyskać kolor tła układ:

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

jeśli jest RelativeLayout potem po prostu znaleźć swój identyfikator i używać tam obiekt zamiast LinearLayout.

0

Najprostszym sposobem na to jest:

view.getSolidColor(); 
0

krótki i prosty sposób:

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