2010-04-26 6 views
17

मेरे द्वारा क्लिक किए जाने पर 'दबाए गए' स्थिति में छविबटन कैसे रह सकता है? असल में मैं सिर्फ पृष्ठभूमि को उदास पृष्ठभूमि होना चाहता हूं, लेकिन मुझे यह पता नहीं लगाया जा सकता कि इसे कैसे सेट किया जाए। फिलहाल, मैंने बस चयनित बटन पृष्ठभूमि को अपने res फ़ोल्डर में कॉपी किया है, लेकिन जब मैं इसे पृष्ठभूमि के रूप में सेट करता हूं, तो यह धुंधला हो जाता है (क्योंकि मूल छवि बटन से भी बड़ी है)।एंड्रॉइड सेट छवि बटन टॉगल

सामान्य पृष्ठभूमि: alt text http://img707.imageshack.us/img707/9199/ss20100426163452.png मुझे क्या हो रही है: alt text http://img707.imageshack.us/img707/912/ss20100426163357.png alt text http://img3.imageshack.us/img3/8304/ss20100426163623.png

इसके अलावा मैं नहीं मानता कि मैं वास्तव में कई अलग अलग यूआई लेआउट पर विचार इस विधि का उपयोग कर सकते हैं। उपयोगकर्ता यूआई के अनुसार दबाए जाने वाले यूआई के अनुसार दबाया जाना चाहिए। आप बस एक ImageButton उपयोग कर सकते हैं, और मैन्युअल रूप से जावा में क्लिक करने पर ही अपनी छवि drawable टॉगल

पहले,:

+0

क्या आप वाकई 'ImageButton' के बजाय' ToggleButton' नहीं चाहते हैं? – CommonsWare

+0

टॉगल बटन अभी भी मुझे दबाए जाने के लिए बटन सेट करने नहीं देगा। मुझे प्रत्येक बटन के लिए मैन्युअल रूप से कस्टम आइकन बनाना होगा। मैं बस पृष्ठभूमि छवि दबाया जाना चाहता हूँ। – GuyNoir

उत्तर

40

ऐसा करने का कुछ तरीके हैं। उदाहरण के लिए, एंड्रॉइड does for the 'shuffle' button पर यह stock Music player है। यद्यपि आप अपने चेक किए गए राज्य में बटन पृष्ठभूमि पर नियंत्रण नहीं रखेंगे, फिर भी आप छवि को स्वैप करने में सक्षम होंगे, जो एंड्रॉइड यूआई-स्थिरता परिप्रेक्ष्य से अनुकूल हो सकता है।

एक और विकल्प ToggleButton के अंदर एक छवि प्राप्त करने के लिए ड्रॉबल्स और नौ-पैच के जटिल सेट का उपयोग करना है, पृष्ठभूमि और/या टॉगल पर छवि संसाधन बदलने के विकल्प के साथ। यही वह विकल्प है जो मैं नीचे दिखाऊंगा। लेकिन याद रखें, ऐसा करने से पहले यूआई स्थिरता के बारे में सावधान रहें।


रेस/लेआउट/foo.xml

... 
<ToggleButton 
    android:textOn="" android:textOff="" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/shuffle_button" /> 
... 

रेस/drawable/shuffle_button.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- use "@android:drawable/btn_default" to keep consistent with system --> 
    <item android:drawable="@drawable/toggle_button_background" /> 
    <item android:drawable="@drawable/shuffle_button_image" /> 
</layer-list> 

रेस/drawable/toggle_button_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- checked state --> 
    <item android:state_pressed="false" android:state_checked="true" 
      android:drawable="@drawable/btn_default_checked" /> 

    <item android:state_window_focused="false" android:state_enabled="true" 
      android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_window_focused="false" android:state_enabled="false" 
      android:drawable="@drawable/btn_default_normal_disable" /> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/btn_default_pressed" /> 
    <item android:state_focused="true" android:state_enabled="true" 
      android:drawable="@drawable/btn_default_selected" /> 
    <item android:state_enabled="true" 
      android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_focused="true" 
      android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    <item android:drawable="@drawable/btn_default_normal_disable" /> 
</selector> 

रेस/drawable/shuffle_button_image.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/ic_mp_shuffle_on_btn" android:state_checked="true" /> 
    <item android:drawable="@drawable/ic_mp_shuffle_off_btn" /> 
</selector> 

छवि फ़ाइलें

  • btn_default_<state>.9.pngcore/res/res/drawable-hdpi और core/res/res/drawable-mdpi (भी ldpi) के तहत frameworks/base.git में पाया जा सकता। चेतावनी: यदि आप इनका उपयोग करते हैं, तो आपका ऐप कस्टमाइज्ड ओएस यूआई (यानी एचटीसी सेंस यूआई) वाले उपकरणों पर असंगत दिखाई देगा।
  • ic_mp_shuffle_<state>_btn.9.png नौ-पैच होने की आवश्यकता है, ताकि छवि केंद्रित हो और बटन फिट करने के लिए नहीं बढ़ाया जा सके। नीचे दिए गए उदाहरण हैं आइकन के hdpi संस्करणों:

रेस/drawable- (ज | मीटर | ldpi)/ic_mp_shuffle_ (पर | बंद) _btn.9।png

ic_mp_shuffle_on_btn.9.png http://nikonizer.yfrog.com/Himg404/scaled.php?tn=0&server=404&filename=icmpshuffleonbtn9.png&xsize=640&ysize=640ic_mp_shuffle_off_btn.9.png http://nikonizer.yfrog.com/Himg708/scaled.php?tn=0&server=708&filename=icmpshuffleoffbtn9.png&xsize=640&ysize=640


अंतिम नोट: जब संभव प्रणाली यूआई के अनुरूप होना करने के लिए याद रखें, और यह तथ्य के प्रति जागरूक अपने अनुप्रयोग ओएस के अनुकूलित संस्करण के साथ उपकरणों पर चला सकते हैं कि हो सकता है जिनके बटन जैसे यूआई तत्वों के लिए अलग-अलग ग्राफिक्स हैं। इसका एक उदाहरण HTC Sense है, जिसमें स्टॉक एंड्रॉइड में ग्रे/नारंगी/पीले रंग के स्थान पर हरे रंग के बटन हैं। इसलिए, यदि आप टॉगल-सक्षम बटन पृष्ठभूमि बनाने के लिए ओपन सोर्स रिपॉजिटरी से btn_default_... पीएनजी फ़ाइलों की प्रतिलिपि बनाते हैं, तो आप उन उपकरणों पर स्थिरता तोड़ देंगे।

+0

मुझे लगता है कि सीधे ओएस से संसाधनों तक पहुंचने का कोई तरीका नहीं है ताकि यह हर बार सही पृष्ठभूमि को पकड़ सके? – GuyNoir

+0

नहीं, क्योंकि '@android: drawable/btn_default_normal' और जैसे (नौ-पैच) सार्वजनिक नहीं हैं, लेकिन' @android: drawable/btn_default' (चयनकर्ता) सार्वजनिक है। दुर्भाग्य से चयनकर्ता में चेक किए गए राज्य शामिल नहीं हैं। –

+0

बह। ठीक है, जानकारी के लिए धन्यवाद। – GuyNoir