विभिन्न राज्य के लिए छवि बटन पृष्ठभूमि सेट कैसे करें?


81

मुझे दो राज्यों के साथ इमेजबटन चाहिए) सामान्य ii) स्पर्श (या क्लिक)।

मैंने इमेजबटन बैकग्राउंड में सामान्य इमेज सेट की है और मैं ऑनक्लिक विधि से इमेज (दबाए गए) को बदलने की कोशिश कर रहा हूं , लेकिन यह नहीं बदलता है।

मैं चाहता हूं कि अगर मैंने छवि बटन दबाया तो छवि को सामान्य से बदलकर दबाया जाना चाहिए जब तक कि मैं अन्य बटन नहीं दबाता हूं लेकिन ऐसा नहीं होता है

क्या कोई मुझे सुझाव दे सकता है कि मैं चयनकर्ता के साथ या रन टाइम में ऐसा कैसे कर सकता हूं ?

यहाँ मेरा imagebuttonpanel कोड है।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal"
  android:gravity="bottom"
  android:id="@+id/buttonpanel">
  <ImageButton android:id="@+id/buttonhome"
               android:layout_width="80dp"
               android:layout_height="36dp"
               android:focusable="true" 
               android:background="@drawable/homeselector">
               </ImageButton>
  <ImageButton android:id="@+id/buttonsearch"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/searchselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonreg"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/registerselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonlogin"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/loginselector"
               android:focusable="true">
               </ImageButton>
</LinearLayout>

और मेरा चयनकर्ता xml है

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--<item android:state_pressed="true" android:drawable="@drawable/homehover" 
        /> <item android:state_focused="true" android:drawable="@drawable/homehover" 
        /> <item android:drawable="@drawable/home" /> <item android:state_window_focused="true" 
        android:drawable="@drawable/homehover" /> -->
    <item android:state_enabled="false" android:drawable="@drawable/homehover" />
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/homehover" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/homehover" />
    <item android:state_enabled="true" android:drawable="@drawable/home" />

</selector> 

और मैंने ऑनटू और ऑनक्लिक ईवेंट पर छवि संसाधन को बदलने की भी कोशिश की है, लेकिन यह मदद नहीं करता है।


मुझे लगता है कि आप कुछ इस तरह की तलाश में हैं । मैंने पहले भी इसी तरह का सवाल पूछा था।
फेडेरिको क्लेज़ कुल्लोक

जवाबों:


225

अपने ड्रॉबल में इस तरह से एक xml फ़ाइल बनाएँ:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:drawable="@drawable/btn_sendemail_disable" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/btn_send_email_click" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@drawable/btn_sendemail_roll" />
    <item
        android:state_enabled="true"
        android:drawable="@drawable/btn_sendemail" />
</selector>

और तदनुसार छवियों को सेट करें और फिर इस xml को अपनी पृष्ठभूमि के रूप में सेट करें imageButton


11
सही बात। इसे चयनकर्ता XML कहा जाएगा
अमन आलम

4
@ जितेंद्र: मुझे लगता है कि ऑप पहले से ही यह जानता था। इस प्रश्न की व्याख्या की जा सकती है कि चयनकर्ता को आमंत्रित क्यों नहीं किया जा रहा है।
शमूएल

क्या State_enabled आवश्यक है?
डॉ। अंजनी

4
यह सामान्य रूप से काम करता है Button, लेकिन नहीं ImageButton। इसके अलावा इस के लिए काम करेगा ImageButtonकी android:srcविशेषता है, लेकिन नहीं android:background। और आपके और ओपी के चयनकर्ता के बीच अंतर क्या है? क्या मैं कुछ भूल रहा हूँ ?
अलेक्जेंडर मालाखोव

@AlexanderMalakhov मेरे लिए यह इमेजबटन और एंड्रॉइड: बैकग्राउंड के लिए बहुत अच्छा काम करता है।
त्रैमासिक

15

इसे इस्तेमाल करे

btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        btn.setBackgroundResource(R.drawable.icon);
    }
});

क्या कोई ऐसा विचार है जिसे मैं कर सकता हूं
हितेंद्र

9

mhh मुझे एक और समाधान मिला, जिसने मेरी मदद की, 'क्योंकि मेरे पास दो अलग-अलग साथी हैं:

  • या तो आइटम क्लिक नहीं किया गया है
  • या इसे क्लिक किया जाता है और इसलिए इसे हाइलाइट किया जाएगा

अपने .xml में मैं इस तरह से ImageButton को परिभाषित करता हूं:

 <ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/selector" />

संबंधित चयनकर्ता फ़ाइल इस तरह दिखाई देती है:

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

    <item android:drawable="@drawable/ico_100_checked" android:state_selected="true"/>
    <item android:drawable="@drawable/ico_100_unchecked"/>

</selector>

और मेरे onCreate में मुझे कॉल:

final ImageButton ib = (ImageButton) value.findViewById(R.id.imageButton);

    OnClickListener ocl =new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()){
                button.setSelected(false);
            } else {
                ib.setSelected(false);
                //put all the other buttons you might want to disable here...
                button.setSelected(true);
            }
        }
    };

ib.setOnClickListener(ocl);
//add ocl to all the other buttons

किया हुआ। उम्मीद है की यह मदद करेगा। मुझे पता लगाने में थोड़ा समय लगा।


8

हाय निम्नलिखित कोड का प्रयास करें यह आपके लिए उपयोगी होगा,

((ImageView)findViewById(R.id.ImageViewButton)).setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
            ((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_over);

        if(event.getAction() == MotionEvent.ACTION_UP)
            ((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_normal);

        return false;
    }
});

1
वास्तव में, यह भी वास्तव में काम नहीं करता है, अगर Action_up एक अलग दृश्य पर होता है। Event.getAction () == MotionEvent.ACTION_CANCEL का उपयोग ACTION_UP के बजाय करने का प्रयास करें।
chug2k

3

मुझे लगता है कि आप समस्या चयनकर्ता फ़ाइल नहीं है।

आपको जोड़ना होगा

<imagebutton ..
    android:clickable="true"
/>

आपकी छवि बटन के लिए।

डिफ़ॉल्ट रूप से onClick को listitem स्तर (पैरेंट) पर संभाला जाता है । और imageButtons onClick को पुनः प्राप्त न करें।

जब आप उपरोक्त विशेषता जोड़ते हैं तो छवि बटन को घटना प्राप्त होगी और चयनकर्ता का उपयोग किया जाएगा।

इस POST को चेक करें जो चेकबॉक्स के लिए समान है।


1

यदि आप दबाए गए छवि बटन चाहते हैं, तो छवि को सामान्य से बदलकर दबाया जाना चाहिए

लेकिन मैं सबसे अच्छा तरीका यह होगा कि रेडियोबटन को कस्टमाइज़ करें और एक समूह में उनका उपयोग करें। मैंने इसका एक उदाहरण देखा है। क्षमा करें मुझे वह लिंक याद नहीं है।

लेकिन अगर आप उससे बचना चाहते हैं। आपको इसे अपने selector.xml में जोड़ना होगा

एक बार किया है। बस अपने कोड को मिलाएं और इसे जोड़ें

public void onClick ( View v ) {
    myImageButton.setSelected ( true ) ;
 }

आपको परिणाम दिखाई देगा। लेकिन आपको उन राज्यों को प्रबंधित करना होगा जो हाल ही में बटन दबाए गए थे। ताकि आप सेट कर सकें

  myOLDImageButton.setSelected ( false ) ;

मेरा सुझाव है कि आप एक सरणी में सभी बटन संदर्भ डालें।


0

आप जो करने की कोशिश कर रहे हैं वह इमेजबटन की सूची की तुलना में अधिक खंडित है।

यहाँ http://blog.bookworm.at/2010/10/segmented-controls-in-android.html ऐसा करने का एक उदाहरण है। मूल विचार ImageButton के बजाय RadioButton को कस्टमाइज़ करना है, क्योंकि RadioButton के पास आपकी ज़रूरत की जाँच की गई स्थिति होगी


नहीं .. मुझे लगता है कि वह क्या चाहता है। खंडित नियंत्रण पूरी तरह से अलग UI तत्व है। वह 1 बटन चाहता है जो राज्य को बदलता है।
हेनले चिउ

0

क्या आपने कोशिश की है CompoundButton? CompoundButton के पास जांच योग्य संपत्ति है जो आपकी आवश्यकता से बिल्कुल मेल खाती है। इन के साथ ImageButtons बदलें।

  <CompoundButton android:id="@+id/buttonhome"
                  android:layout_width="80dp"
                  android:layout_height="36dp"
                  android:background="@drawable/homeselector"/>

चयनकर्ता xml को निम्न में बदलें। कुछ संशोधन की आवश्यकता हो सकती है लेकिन इसके state_checkedस्थान पर उपयोग करना सुनिश्चित करें state_pressed

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/homehover" />
    <item android:state_checked="true" android:state_enabled="true"
          android:drawable="@drawable/homehover" />
    <item android:state_focused="true" android:state_enabled="true"
          android:drawable="@drawable/homehover" />
    <item android:state_enabled="true" android:drawable="@drawable/home" />

</selector> 

में CompoundButton.OnCheckedChangeListenerकी जांच करनी है और अपने शर्तों के आधार पर अन्य अनचेक करें।

 mButton1.setOnCheckedChangeListener(new OnCheckedChangeListener() {

   public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // Uncheck others. 
        }
   }
});

इसी प्रकार OnCheckedChangeListenerप्रत्येक बटन पर एक सेट करें, जो जांचे जाने पर अन्य बटन को अनचेक कर देगा। उम्मीद है की यह मदद करेगा।


आप XML में सीधे CompoundButton का उपयोग नहीं कर सकते क्योंकि यह एक अमूर्त वर्ग है।
दान हुलमे

0

@ ingsaurabh का जवाब है कि अगर आप एक onClick का उपयोग कर रहे हैं तो भी जाने का रास्ता है। हालाँकि, यदि आप एक ऑनटच इवेंट का उपयोग कर रहे हैं, तो आप उपयोग करके विभिन्न पृष्ठभूमि (अभी भी @ ingsaurabh के उदाहरण के समान) का चयन कर सकते हैं view.setPressed()

अधिक जानकारी के लिए निम्नलिखित देखें: onTouchListener का उपयोग करके राज्यों (कस्टम XML चयनकर्ता) को बदलने के लिए एंड्रॉइड पर "प्रेस एंड होल्ड" बटन


0

आप Res / drawable में चयनकर्ता फ़ाइल बना सकते हैं

उदाहरण: res / drawable / selector_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_disabled" android:state_enabled="false" />
    <item android:drawable="@drawable/btn_enabled" />
</selector>

और लेआउट गतिविधि, टुकड़ा या आदि में

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/selector_bg_rectangle_black"/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.