2012-11-22 18 views
7

मैं एक कस्टम क्लास बनाना चाहता हूं जो एंड्रॉइड एक्सएमएल फ़ाइल में रखे गए गुणों में से एक के रूप में रंग लेता है। हालांकि, एक रंग संसाधन हो सकता है या यह कई प्रत्यक्ष रंग विनिर्देशों में से एक हो सकता है (उदाहरण के लिए हेक्स मान)। रंग को पुनः प्राप्त करने के लिए AttributeSet का उपयोग करने के लिए कोई आसान पसंदीदा तरीका है, क्योंकि रंग का प्रतिनिधित्व करने वाला एक पूर्णांक संसाधन संसाधन या एआरबीबी मान को संदर्भित कर सकता है?मैं एक विशेषता एसईटी से रंग कैसे प्राप्त कर सकता हूं?

उत्तर

22

मान लीजिए कि आप इस तरह अपने कस्टम रंग विशेषता को परिभाषित किया है दो:

public ColorView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.color_view); 
    try { 
     int color = a.getColor(R.styleable.color_view_my_color, 0); 
     setBackgroundColor(color); 
    } finally { 
     a.recycle(); 
    } 
} 

आप नहीं करते:

<declare-styleable name="color_view"> 
    <attr name="my_color" format="color" /> 
</declare-styleable> 
आपके विचार के निर्माता में

उसके बाद, आप इस तरह रंग प्राप्त कर सकते हैं वास्तव में चिंता करना है कि रंग गुण कैसे पॉप्युलेट किया गया था, या तो

<com.test.ColorView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:my_color="#F00" 
    /> 

या इस तरह:

<com.test.ColorView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:my_color="@color/red" 
    /> 

getColor विधि किसी भी मामले में एक रंग मान प्रदान करेंगे।

+3

बहुत बढ़िया, धन्यवाद! ('# F00' का अच्छा उपयोग भी :) :) –

+9

अपने 'टाइप किए गए ऐरे' को रीसायकल करना न भूलें। –