एंड्रॉइड बटन को कैसे अक्षम करें?


369

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

नमूना लेआउट का स्क्रीन शॉट

जवाबों:


799

क्या आपने यह कोशिश की?

myButton.setEnabled(false); 

अपडेट: ग्वेन के लिए धन्यवाद। लगभग यह भूल गया कि android:clickableएक बटन क्लिक करने योग्य हो सकता है या नहीं यह निर्धारित करने के लिए आपके XML लेआउट में सेट किया जा सकता है।


66
समतुल्य Android है: xml में सक्षम है।
नम्रता

1
और आपको यह कहां से मिला? क्या आप इसे यहाँ लिंक कर सकते हैं?
वरुण

4
@ नम्रता सिर्फ "बटन" विगेट्स के लिए काम कर रही है, छवि के लिए नहीं एक बटन के रूप में
mehmet

Xamarin समकक्ष: myButton.Enabled = false;
कैमरन फॉरवर्ड

48

आप इसे अपने XML में सक्षम नहीं कर सकते (क्योंकि आपका लेआउट रनटाइम पर सेट है), लेकिन आप यह सेट कर सकते हैं कि क्या यह गतिविधि के लॉन्च पर क्लिक करने योग्य है android:clickable


4
एंड्रॉइड में 5 साल का अनुभव और मुझे इसके बारे में पता है! : /
सागर

35

आप बस अपनी गतिविधि में कोड की एक पंक्ति लिखते हैं

Button btn = (Button) findViewById(R.id.button1);
btn.setEnabled(false);

जब आप एक ही बटन को सक्षम करना चाहते हैं तो लिखें

Button btn = (Button) findViewById(R.id.button1);
btn.setEnabled(true);

20
वह 2 लाइन है। यह वही है। ((Button)findViewById(R.id.mybutton)).setEnabled(false);
मैट क्लार्क

34
भावनाओं को समझने की कोशिश करें मैट ..;)
दीपक शर्मा

30

हाँ इसे XML में अक्षम किया जा सकता है:

<Button
android:enabled="false"
/>

2
यह xml के लिए वास्तविक उत्तर है। क्लिक करने योग्य के साथ खिलवाड़ करने की सभी बकवासों का कोई लेना-देना नहीं है कि बटन को कैसे निष्क्रिय किया जाए।
स्कॉट बिग्स

1
मुझे लगता है कि लोगों ने सोचा कि आप ऐसा नहीं कर सकते, क्योंकि AS / IDEA कोड पूरा होने का सुझाव android:enabledतब नहीं दिया जाता है जब आप इसे टाइप करना शुरू करते हैं। (आज तक भी।)
केविन क्रुमविडे

1
मैंने कोशिश की कि यह काम नहीं कर रहा है, केवल कोड setEnabledसे काम कर रहा है
FindOutIslamNow

23

जावा में, एक बार जब आपके पास बटन का संदर्भ होता है:

Button button = (Button) findviewById(R.id.button);

बटन को सक्षम / अक्षम करने के लिए, आप या तो उपयोग कर सकते हैं:

button.setEnabled(false);
button.setEnabled(true);

या:

button.setClickable(false);
button.setClickable(true);

चूँकि आप शुरू से ही बटन को निष्क्रिय करना चाहते हैं, आप बटन का उपयोग कर सकते हैं। शुरुआत (झूठा); ऑनक्रैट विधि में। अन्यथा, XML से, आप सीधे उपयोग कर सकते हैं:

android:clickable = "false"

इसलिए:

<Button
        android:id="@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="@string/button_text"
        android:clickable = "false" />

उत्तर दे

1
@ पोल्डी: वास्तव में, यदि आप दो उत्तरों को पढ़ते हैं, तो आप समझेंगे कि वे बहुत समान हैं, लेकिन समान नहीं हैं।
पाओलो रूवेली

9

मेरे मामले में,

myButton.setEnabled(false);
myButton.setEnabled(true);

ठीक काम कर रहा है और यह बटन को सक्षम और अक्षम कर रहा है जैसा कि इसे करना चाहिए। लेकिन एक बार बटन स्थिति अक्षम हो जाने के बाद, यह फिर से सक्षम स्थिति में वापस नहीं जाता है, हालांकि यह क्लिक करने योग्य है। मैंने ड्रा करने योग्य स्थिति को अमान्य और ताज़ा करने की कोशिश की, लेकिन कोई भाग्य नहीं।

myButton.invalidate();
myButton.refreshDrawableState();

यदि आप या कोई समान समस्या है, तो मेरे लिए जो काम करता है वह पृष्ठभूमि को फिर से आकर्षित करने योग्य है। किसी भी एपीआई स्तर पर काम करता है।

myButton.setEnabled(true);
myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable));

8

कोटलिन में, यदि आप आईडी के साथ बटन व्यू का संदर्भ लेते हैं, तो सक्षम / अक्षम करें बटन

layout.xml

<Button
   android:id="@+id/btn_start"
   android:layout_width="100dp"
   android:layout_height="50dp"
   android:text="@string/start"
   android:layout_alignParentBottom="true"/>

activity.kt

  btn_start.isEnabled = true   //to enable button
  btn_start.isEnabled = false  //to disable button

2

के रूप में पहली बार में xml बटन बनाते हैं android:clickable="false"

<Button
        android:id="@+id/btn_send"
        android:clickable="false"/>

फिर आपके कोड में, oncreate()विधि के अंदर बटन गुण सेट करें

btn.setClickable(true);

फिर बटन पर क्लिक करके कोड को कोड में बदलें

btn.setClickable(false);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    btnSend = (Button) findViewById(R.id.btn_send);
    btnSend.setClickable(true);
    btnSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            btnSend.setClickable(false);

        }
    });
}

2

PARAMETER के विशाल कोण का उपयोग करने के लिए सूची में गलत !!!

btnSend.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnSend.setClickable(false);

    }
});

सही रास्ता:

btnSend.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        /** check given view  by assertion or cast as u wish */
        if(v instance of Button) {

            /** cast */
            Button button = (Button) v;

            /** we can perform some check up */
            if(button.getId() == EXPECTED_ID) {

                /** disable view */
                button.setEnabled(false)            
                button.setClickable(false); 
            }

        } else {

             /** you can for example find desired view by root view  */
             Button bt = (Button) v.getRootView().findViewById(R.id.btId);

             /*check for button */
             if(bt!=null) {

                 /** disable button view */
                 ...
             } else {
                 /** according to @jeroen-bollen remark
                   * we made assumption that we expected a view
                   * of type button here in other any case  
                   */
                  throw new IllegalArgumentException("Wrong argument: " +
                         "View passed to method is not a Button type!");
             }
          }
       }
    });

EDIT: @ jeroen-bollen के जवाब में

 View.OnClickListener 

है इंटरफ़ेस परिभाषा के लिए जब एक दृश्य क्लिक किया जाता है एक कॉलबैक लागू किया जा करने के लिए।

विधि परिभाषा के साथ

void onClick(View v);

जब दृश्य पर क्लिक किया जाता है, तो दृश्य वर्ग ऑब्जेक्ट ऑनबैक पर क्लिक करने की विधि पर कॉलबैक बनाता है () खुद पैरामीटर के रूप में भेज रहा है, इसलिए अशक्त दृश्य पैरामीटर घटित नहीं होना चाहिए यदि यह एक त्रुटि है यह उदाहरण के लिए तब हो सकता है जब व्यू ऑब्जेक्ट वर्ग इस बीच नष्ट हो गया था (के लिए उदाहरण जीसी द्वारा एकत्र) या विधि हैक के कारण छेड़छाड़ की गई थी

Instof और अशक्त के बारे में थोड़ा

जेएलएस / 15.20.2। तुलना ऑपरेटर संचालक प्रकार

रन टाइम के दौरान, रिलेशनशिप ऑपरेटर का परिणाम सही है यदि RelationalExpression का मान शून्य नहीं है और संदर्भ को ClassTastException को बढ़ाए बिना ReferenceType में डाला जा सकता है।

अन्यथा परिणाम गलत है


लेखक के तीन शब्द

अगर यू ASK क्यों?

केवल NullPointerException AVOID करने के लिए

थोड़ा और कोड आपके कोड में बाद में बग ट्रैकिंग पर अपना समय बचाएगा और असामान्यता की घटना को कम करता है।

निम्नलिखित उदाहरण पर विचार करें:

View.OnClickListener listener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnSend.setClickable(false);

    }
});

btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)  

2
लगता है कि किसी भी समय और अभिव्यक्ति कहा जाता है, कोड पहले से ही bugged है। आप एक बटन की उम्मीद कर रहे थे लेकिन कुछ और पारित हो गया। आप चाहिए जब एक अपवाद फेंक vएक नहीं है Button
जीरो

बिल्कुल नहीं मेरा क्या मतलब है, लेकिन फिर भी एक सुधार।
जीरो

@JeroenBollen कृपया विस्तार से बताएं :) ठीक है, मैं केवल एक चीज देखता हूं जो "गलत तरीके से विधि" के बारे में अपवाद संदेश नहीं है। इसके अलावा यह केवल यह दिखाने का प्रयास है कि यह कैसा दिखना चाहिए।
ceph3us

मेरा मतलब था कि जब फंक्शन अपने आप अशक्त हो जाता है, तो यह पहले से ही एक बग है और इसे एक अपवाद फेंक देना चाहिए।
जीरो

1

कोटलिन के साथ आप कर सकते हैं,

// to disable clicks
myButton.isClickable = false 

// to disable button
myButton.isEnabled = false

// to enable clicks
myButton.isClickable = true 

// to enable button
myButton.isEnabled = false
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.