2012-12-31 13 views
5

मेरे पास एक बटन है जिसमें एक खींचने योग्य और टेक्स्ट शामिल है। मैं चाहता हूं कि बटन की पृष्ठभूमि सामान्य सामान्य से अलग हो (अधिमानतः एक सादा रंग)। यह ठीक काम करता है, मैं बस XML फ़ाइल में android:background विशेषता का उपयोग करता हूं और तदनुसार रंग असाइन करता हूं। हालांकि, मैं चयनित या केंद्रित (राज्य चयनकर्ता) जब पृष्ठभूमि को एक अलग रंग में बदलना चाहता हूं। android:background विशेषता के रूप में इस एक्सएमएलकस्टम बटन स्थिति पृष्ठभूमि रंग कैसे सेट करें?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_focused="true" android:state_pressed="false" android:color="@color/green" /> 
     <item android:state_focused="true" android:state_pressed="true" android:color="@color/green" /> 
     <item android:state_focused="false" android:state_pressed="true" android:color="@color/green" /> 
     <item android:color="@color/white" /> 
    </selector> 

और सेट:

मैं परिभाषित रंगों के साथ एक drawable फ़ोल्डर में एक चयनकर्ता (जो अच्छी तरह से जब एक बटन के पाठ के साथ काम कर काम करता है), इसलिए तरह बनाने का प्रयास किया है, तो जैसे:

android:background="@drawable/button_state" 

लेकिन इस का कारण बनता है एक शक्ति के पास हुए कहा:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/button_state.xml from drawable resource ID #0x7f020070 

लेकिन संसाधन वहां है। क्या आप पृष्ठभूमि स्थिति को कस्टमाइज़ नहीं कर सकते? यदि आप कर सकते हैं, कैसे? या मैं गलत क्या कर रहा हूँ? सहायता के लिए धन्यवाद!

+1

आप निश्चित रूप से चयनकर्ता को पृष्ठभूमि खींचने योग्य के रूप में उपयोग कर सकते हैं। आपने 'button_state.xml' कहां रखा? –

+0

मैंने इसे ड्रॉ करने योग्य फ़ोल्डर में रखा क्योंकि मैं अक्सर करता हूं। और लॉन्च होने पर ऐप फोर्स बंद हो जाता है, इसलिए इसे मेरी एक्सएमएल फाइल – chRyNaN

+0

को स्वीकार नहीं करना चाहिए या शायद यह एक्सएमएल फ़ाइल को पहचानता है, क्योंकि यदि मैं इसे टेक्स्टकॉलर विशेषता के साथ उपयोग करता हूं तो यह ठीक काम करता है। केवल जब मैं पृष्ठभूमि विशेषता के साथ इसका उपयोग करता हूं तो यह बल – chRyNaN

उत्तर

10

आपके द्वारा पोस्ट किया गया एक्सएमएल color state list के लिए उपयुक्त है, न कि एक राज्य सूची ड्रायबल। ऐसा करें:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" > 
     <shape><solid android:color="@color/green"/></shape> 
    </item> 
    . . . 
</selector> 

वैकल्पिक रूप से, res/color में अपने मौजूदा फ़ाइल डाल दिया और के रूप में आप किसी भी अन्य रंग ही उपयोग करें। हालांकि, मुझे याद नहीं है कि क्या आप एक दृश्य के लिए पृष्ठभूमि के रूप में सीधे रंग स्थिति सूची का उपयोग कर सकते हैं।

+0

बंद कर देता है ठीक है, बस मैं समझता हूं कि यह सही तरीके से कैसे काम करता है: 'बटन' की पृष्ठभूमि के लिए राज्य चयनकर्ता का उपयोग करते समय, चयनकर्ता xml में परिभाषित पृष्ठभूमि संसाधन ' drawable'? – chRyNaN

+2

@AndroidStudent - बिल्कुल। एक राज्य सूची खींचने योग्य और रंगीन राज्य सूची के बीच एक बड़ा अंतर (एंड्रॉइड के आंतरिक में) है। एक खींचने योग्य राज्य सूची को केवल अन्य ड्रॉबल्स को संदर्भित करने की आवश्यकता है। यह थोड़ा उलझन में है क्योंकि एपीआई रंग संदर्भों का उपयोग करने की अनुमति देता है जहां ड्रॉइंग संदर्भों की आवश्यकता होती है, लेकिन यह एक सुविधा है जो हर जगह काम नहीं करती है। –

+0

आह मुझे यह पता है, बहुत बहुत धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं! – chRyNaN

2

उदाहरण: https://developer.android.com/guide/topics/resources/color-list-resource.html:

XML file saved at res/color/button_text.xml: 

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_pressed="true" 
       android:color="#ffff0000"/> <!-- pressed --> 
     <item android:state_focused="true" 
       android:color="#ff0000ff"/> <!-- focused --> 
     <item android:color="#ff000000"/> <!-- default --> 
    </selector> 
    This layout XML will apply the color list to a View: 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/button_text" 
     android:textColor="@color/button_text" /> 

@ रंग/BUTTON_TEXT

रेस/रंग/button_text.xml

यह ColorStateList संसाधन में गूगल द्वारा प्रदान की उदाहरण है

मुझे लगता है कि ColorStateList को विजेट के टेक्स्ट व्यू के रंग को बदलने के लिए इस्तेमाल किया जाना चाहिए।

संबंधित मुद्दे