কিভাবে একটি অ্যান্ড্রয়েড বোতাম অক্ষম করবেন?


369

আমি একটি লেআউট তৈরি করেছি যাতে নেক্সট এবং পূর্ববর্তী দুটি বোতাম রয়েছে। বোতামগুলির মধ্যে আমি কিছু গতিশীল দর্শন তৈরি করছি। সুতরাং আমি যখন প্রথম অ্যাপ্লিকেশনটি চালু করব তখন আমি "পূর্ববর্তী" বোতামটি অক্ষম করতে চাই যেহেতু পূর্বের কোনও মতামত থাকবে না। যখন দেখানোর মতো আরও ভিউ না থাকে তখন আমি "নেক্সট" বোতামটি অক্ষম করতে চাই। বোতামগুলি নিষ্ক্রিয় করার উপায় আছে কি?

নমুনা বিন্যাসের স্ক্রিন শট

উত্তর:


798

আপনি কি এই চেষ্টা করেছেন?

myButton.setEnabled(false); 

আপডেট: শুয়েনকে ধন্যবাদ android:clickableকোনও বোতাম ক্লিকযোগ্য হতে পারে কিনা তা নির্ধারণ করতে এটি আপনার এক্সএমএল লেআউটে সেট করা যেতে পারে তা প্রায় ভুলে গিয়েছিল ।


66
সমতুল্য অ্যান্ড্রয়েড: এক্সএমএলে সক্ষম।
নমরাথা

1
এবং আপনি ডকুমেন্টেশনে এটি কোথায় পেয়েছেন? আপনি এখানে লিঙ্ক করতে পারেন?
বরুণ

4
@Namratha এটা শুধু "বোতাম" উইজেট জন্য কাজ করছে, না imageView জন্য একটি বাটন যেমন
Mehmet

জামারিন সমতুল্য: myButton.En اهل = মিথ্যা;
ক্যামেরন ফরোয়ার্ড

48

আপনি এটি সক্ষম করতে পারবেন না বা এটি আপনার এক্সএমএলে অক্ষম করতে পারবেন না (যেহেতু আপনার বিন্যাসটি রানটাইমের সময় সেট করা আছে) তবে আপনি যদি সেটি চালু করতে পারেন তবে এটির সাথে ক্রিয়াকলাপটি প্রবর্তনের সময় ক্লিকযোগ্য 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

হ্যাঁ এটি ব্যবহার করে এক্সএমএলে এটি অক্ষম করা যেতে পারে:

<Button
android:enabled="false"
/>

2
এটি এক্সএমএলের আসল উত্তর is ক্লিকযোগ্য এর সাথে জগাখিচির যে সমস্ত বাজে কথা আছে তাতে এটিকে অক্ষম দেখানোর জন্য কীভাবে বোতামটি আঁকানো হচ্ছে তার কিছুই করার নেই।
স্কট বিগস

1
আমি মনে করি লোকেরা ভেবেছিল আপনি এটি করতে পারবেন না কারণ এএস / আইডিইএ কোড সমাপ্তির পরামর্শ দেয় না android:enabledযখন আপনি এটি টাইপ করা শুরু করবেন। (এমনকি আজ
অবধি

1
আমি চেষ্টা করেছি এটি কাজ করছে না, কেবল কোড থেকে setEnabledকাজ করছে
FindOutIslam এখন

23

জাভাতে, একবার আপনি বোতামটির রেফারেন্স পাবেন:

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

বোতামটি সক্ষম / অক্ষম করতে আপনি যে কোনওটি ব্যবহার করতে পারেন:

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

বা:

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

যেহেতু আপনি প্রথম থেকেই বোতামটি অক্ষম করতে চান, আপনি বাটন.সেটএনেবল (মিথ্যা) ব্যবহার করতে পারেন ; অনক্রিট পদ্ধতিতে অন্যথায়, এক্সএমএল থেকে, আপনি সরাসরি ব্যবহার করতে পারেন:

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" />

8 ই ডিসেম্বর '10 7:08 এ উত্তর দিয়েছেন বরুণ

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

এক্সএমএলে প্রথমে বোতামটি তৈরি করুন 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

প্যারামিটারের ভেরিয়েবল ইনস্টস্টের ব্যবহারের তালিকার ভুল উপায়ে !!!

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!");
             }
          }
       }
    });

সম্পাদনা: @ জিরোইন-বোলেন এর উত্তরে

 View.OnClickListener 

হয় ইন্টারফেস সংজ্ঞা যখন একটি দৃশ্য ক্লিক করা হয় একটি কলব্যাক প্রার্থনা করা হবে।

সঙ্গে পদ্ধতি সংজ্ঞা

void onClick(View v);

যখন ভিউ ক্লিক করা হয় তখন ভিউ ক্লাস অবজেক্টটি প্যারামিটার হিসাবে পাঠানোর পদ্ধতিটিতে কলিক () ক্লিক করে তোলে, সুতরাং নাল ভিউ প্যারামিটারটি ঘটতে হবে না যদি এটি যদি একটি দৃ an ় ত্রুটি হয় তবে উদাহরণস্বরূপ যখন ভিউ অবজেক্ট শ্রেণিটি ধ্বংস হয়ে গিয়েছিল (এর জন্য) উদাহরণস্বরূপ জিসি দ্বারা সংগৃহীত) বা পদ্ধতি হ্যাকের কারণে হেরফের হয়েছিল

উদাহরণ এবং নাল সম্পর্কে সামান্য

জেএলএস / 15.20.2। তুলনা অপারেটর উদাহরণ টাইপ করুন

চলাকালীন সময়ে, রিলেশনালএক্সপ্রেসের মান শূন্য না হলে এবং ক্লাসকাস্টএক্সসেপশন না বাড়িয়ে রেফারেন্স টাইপটিতে রেফারেন্স দেওয়া যেতে পারে তবে ইনস্ট্যান্টফোনারের ফলাফলটি সত্য।

অন্যথায় ফলাফল মিথ্যা


লেখকের কাছ থেকে তিনটি শব্দ

যদি আপনি জিজ্ঞাসা করেন কেন?

নলপয়েন্টার এক্সসেপশন থেকে খুব দূরে থাকুন

আরও কিছু কোড আপনার কোডে পরে বাগ ট্র্যাকিংয়ের সময় সাশ্রয় করবে এবং অস্বাভাবিকতার ঘটনা হ্রাস করবে।

নিম্নলিখিত উদাহরণ বিবেচনা করুন:

View.OnClickListener listener = new OnClickListener() {

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

    }
});

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

2
অন্য অভিব্যক্তিটি কল করার মতো মনে হয়, কোডটি ইতিমধ্যে বাগড। আপনি একটি বাটন আশা করেছিলেন তবে অন্য কিছু পাস হয়েছিল। আপনি উচিত যখন একটি ব্যতিক্রম নিক্ষেপ vএকটি নয় Button
জেরোইন

আমি যা বলতে চাইছিলাম তা পুরোপুরি নয়, তবে উন্নতি।
জেরোইন

@ জিরোবোলেন ইলবোরেটে দয়া করে :) ঠিক আছে, আমি দেখি যে "পদ্ধতিতে ভুল দৃষ্টিভঙ্গি" সম্পর্কিত ব্যতিক্রম বার্তা এটির সামঞ্জস্যপূর্ণ নয় es তবে এটির চেহারাটি কেমন হওয়া উচিত তা দেখানোর চেষ্টা মাত্র এটি।
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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.