2012-05-04 15 views
12

मुझे पता है कि इस पर एक ही पोस्ट है लेकिन मुझे इनमें से कोई भी जवाब नहीं मिला।पृष्ठभूमि छवि और ढाल के साथ एंड्रॉइड चयनकर्ता

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_enabled="true"> 
    <bitmap 
     android:src="@drawable/bm_btn_background" 
     android:tileMode="repeat" 
     android:gravity="center" /> 
</item> 
<item android:state_enabled="true"> 
    <shape android:shape="rectangle"> 
     <gradient 
      android:startColor="#a0e0b071" 
      android:endColor="#a0a67637" 
      android:angle="270" /> 
     <stroke 
      android:width="1dp" 
      android:color="#5c3708" /> 
     <corners 
      android:radius="5dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 
<item android:state_pressed="true" > 
    <shape> 
     <gradient 
      android:startColor="#a0a67637" 
      android:endColor="#a0e0b071" 
      android:angle="270" /> 
     <stroke 
      android:width="1dp" 
      android:color="#5c3708" /> 
     <corners 
      android:radius="5dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

मैं पृष्ठभूमि के रूप में एक बार-बार छवि और एक ढाल पर लागू किए गए के साथ एक बटन बनाने के लिए कोशिश कर रहा हूँ: तो, मैं इस drawable एक्सएमएल है। इस कोड के साथ मैं केवल पृष्ठभूमि छवि को देखता हूं, न कि ढाल और न ही सीमा और गोलाकार कोनों। साथ ही, जब मैं बटन पर क्लिक करता हूं, तो यह नहीं बदलता है (ढाल को बदलना चाहिए)। मुझे नहीं पता कि इस कोड के साथ क्या गलत है? यदि किसी चयनकर्ता के बजाय मैं परत-सूची का उपयोग करता हूं, तो मुझे वांछित परिणाम मिलते हैं, लेकिन जब मैं बटन दबाता हूं तो यह तब भी नहीं बदलता है। आपकी सहायताके लिए धन्यवाद!

+0

क्या आप फ़ाइल को पृष्ठभूमि में पृष्ठभूमि के रूप में सेट कर रहे हैं या नहीं? – Akram

+0

हां: एंड्रॉइड: पृष्ठभूमि = "@ खींचने योग्य/बटन" – ali

उत्तर

41

चयनकर्ता के लिए आपका कोड गलत है क्योंकि:

  • आप एक ही राज्य के लिए दो तत्व है और के रूप में चयनकर्ता Bitmap तत्व के लिए पहले राज्य (state_enabled) का सामना करना पड़ता है कि यह आपकी ढाल बंद करो और होगा कभी नहीं दिखाई देगा (इसके लिए आपको layer-list का उपयोग करना चाहिए जिसमें Bitmap आइटम और शीर्ष पर ढाल)

  • चयनकर्ता राज्यों से मेल खाता है। जैसा कि आप Button दबाते हैं state_pressed कभी सक्रिय नहीं होगा क्योंकि चयनकर्ता पहले तत्व पर state_enabled से मेल खाता है (इसके लिए आपको राज्य_एनेबल तत्वों के ऊपर state_pressed के लिए कोड ले जाना चाहिए)।

वास्तव में आप सिर्फ state_enabled हटाने और Bitmap + gradientButton के लिए डिफ़ॉल्ट मान हो जाना चाहिए। Bellow अपने चयनकर्ता (मैं मान लिया है कि आप केवल छवि पर ढाल बदलना चाहते हैं (लेकिन छवि, दबाया राज्य में भी दिखाई देनी चाहिए अगर यह नहीं है वांछित व्यवहार) state_pressed के लिए केवल ढाल छोड़) है:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <layer-list> 
      <item> 
       <bitmap android:gravity="center" android:src="@drawable/bm_btn_background" android:tileMode="repeat" /> 
      </item> 
      <item> 
       <shape> 
        <gradient android:angle="270" android:endColor="#a0e0b071" android:startColor="#a0a67637" /> 
        <stroke android:width="1dp" android:color="#5c3708" /> 
        <corners android:radius="5dp" /> 
        <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 

    <item android:state_enabled="true"> 
     <layer-list> 
      <item> 
       <bitmap android:gravity="center" android:src="@drawable/bm_btn_background" android:tileMode="repeat" /> 
      </item> 
      <item> 
       <shape android:shape="rectangle"> 
        <gradient android:angle="270" android:endColor="#a0a67637" android:startColor="#a0e0b071" /> 
        <stroke android:width="1dp" android:color="#5c3708" /> 
        <corners android:radius="5dp" /> 
        <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 


</selector> 
+0

अब मैं समझता हूं कि राज्यों का अर्थ कैसे लिया जाता है। धन्यवाद। यह काम! सभी को धन्यवाद 1 – ali

+0

महान उत्तर +1। – Akram

+0

एक छोटी सी समस्या। गोलाकार कोनों पृष्ठभूमि पर लागू नहीं होते हैं, केवल आकार के लिए। – ali

0

मेरे मामले में मैं इसका उपयोग कर रहा हूं। कोशिश यह

<item android:state_pressed="true"> 
    <shape> 
     <solid android:color="@color/mediumGray" /> 

     <stroke 
      android:width="1px" 
      android:color="@color/darkGray" /> 

     <padding 
      android:bottom="2dp" 
      android:left="1dp" 
      android:right="1dp" 
      android:top="2dp" /> 

     <corners 
      android:bottomLeftRadius="7sp" 
      android:bottomRightRadius="7sp" 
      android:topLeftRadius="7sp" 
      android:topRightRadius="7sp" /> 
    </shape> 
</item> 
<item android:state_focused="true"> 
    <shape> 
     <solid android:color="@color/mediumGray" /> 

     <stroke 
      android:width="1px" 
      android:color="@color/darkGray" /> 

     <padding 
      android:bottom="2dp" 
      android:left="1dp" 
      android:right="1dp" 
      android:top="2dp" /> 

     <corners 
      android:bottomLeftRadius="7sp" 
      android:bottomRightRadius="7sp" 
      android:topLeftRadius="7sp" 
      android:topRightRadius="7sp" /> 
    </shape> 
</item> 
<item> 
    <shape> 
     <solid android:color="@color/lightGray" /> 

     <stroke 
      android:width="1px" 
      android:color="@color/blackTransparent" /> 

     <padding 
      android:bottom="2dp" 
      android:left="1dp" 
      android:right="1dp" 
      android:top="2dp" /> 

     <corners 
      android:bottomLeftRadius="7sp" 
      android:bottomRightRadius="7sp" 
      android:topLeftRadius="7sp" 
      android:topRightRadius="7sp" /> 
    </shape> 
</item> 

0

अपने राज्य पर एक नजर डालें

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- Non focused states --> 
    <item android:drawable="@drawable/nicebuttonround" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/nicebuttonround" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/> 

    <!-- Focused states --> 
    <item android:drawable="@drawable/nicebuttonroundi" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/nicebuttonroundi" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/> 

    <!-- Pressed --> 
    <item android:drawable="@drawable/nicebuttonroundi" android:state_pressed="true" android:state_selected="true"/> 
    <item android:drawable="@drawable/nice22i" android:state_pressed="true"/> 

</selector> 

attrubute छवि के रूप में आप सिर्फ 9 पिच चित्र बनाने के लिए है पृष्ठभूमि दोहरा लिए।

+0

आपका मतलब 'नौ-पैच 'था। –

0

मैंने फ़ोटोशॉप कैनवास आकार विकल्प का उपयोग कर छवि के दाईं ओर अतिरिक्त ट्रांसपेरेंट स्पेस जोड़ा है और यह मेरे लिए ठीक काम करता है। डेमो देखने के लिए छवि के नीचे डाउनलोड करें। enter image description here

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