2013-02-08 12 views
30

मैं अपने कोड से लेआउट का पृष्ठभूमि रंग ढूंढना चाहता हूं। क्या इसे खोजने का कोई तरीका है? linearLayout.getBackgroundColor() जैसे कुछ?लेआउट का पृष्ठभूमि रंग प्राप्त करें

+0

के बाद से पृष्ठभूमि एक रंग नहीं हो सकता है, तो आप linearLayout.getBackground() का उपयोग कर सकते हैं दे देंगे आप एक 'ड्राइटेबल'। विशेष रूप से पृष्ठभूमि रंग पाने के लिए कोई एपीआई नहीं है। [दृश्य के लिए दस्तावेज़ों में और पढ़ें] (http://developer.android.com/reference/android/view/View.html#getBackground%28%29) –

+0

लेकिन मुझे वास्तव में एक लेआउट का रंग ढूंढना होगा। कुछ और रास्ता होना चाहिए! या क्या इसे 'ड्रायबल' से प्राप्त करना संभव है? –

उत्तर

75

यह केवल एपीआई 11+ में पूरा किया जा सकता है यदि आपकी पृष्ठभूमि एक ठोस रंग है।

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

मैं बस अपना जवाब संपादित करने जा रहा था और कहता हूं कि विशेष रूप से यह काम कर सकता है! हालांकि, मुझे यकीन नहीं है कि एपीआई 11+ प्रतिबंध क्यों है? लगता है कि 'ColorDrawable' एपीआई 1 के बाद उपलब्ध है, और यह भी देखें .getBackground()। –

+0

कभी नहीं। मैं देखता हूं कि ColorDrawable के लिए '.getColor' एपीआई 11 में जोड़ा गया था। –

+0

आप' ड्रायटेबल 'को' बिटमैप 'में परिवर्तित कर सकते हैं और पहला पिक्सेल प्राप्त कर सकते हैं। 'int color = bitmap.getPixel (0, 0);' –

10

ColorDrawable.getColor() केवल 11 से ऊपर एपीआई स्तर के साथ काम करेंगे, ताकि आप एपीआई स्तर से इसे समर्थन करने के लिए 1. एपीआई स्तर से नीचे का प्रयोग करें प्रतिबिंब इस कोड का उपयोग कर सकते हैं 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

करने के लिए लेआउट का पृष्ठभूमि रंग प्राप्त करें:

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

यदि यह सापेक्ष है तो बस इसकी आईडी पाएं और लीनियरलाउट के बजाय वहां ऑब्जेक्ट का उपयोग करें।

0

यह करने के लिए सबसे आसान तरीका है:

view.getSolidColor(); 
0

लघु और सरल तरीका:

int color = ((ColorDrawable)view.getBackground()).getColor(); 
संबंधित मुद्दे