শেষ সম্পাদনা পাঠের কীবোর্ডে সম্পন্ন হিট করার পরে "জমা দিন" অন্তর্ভুক্ত


99

আমি এমন কিছু অ্যাপ্লিকেশন ব্যবহার করেছি যেখানে আমি যখন আমার ব্যবহারকারীর নামটি পূরণ করি, তারপরে আমার পাসওয়ার্ডে যান, যদি আমি কীবোর্ডে "সম্পন্ন" হিট করি তবে লগইন ফর্মটি স্বয়ংক্রিয়ভাবে জমা দেওয়া হয়, আমাকে সাবমিট বাটনটি ক্লিক না করে। এটি কিভাবে হয়?



দস্তাবেজের দ্রুত লিঙ্ক: ইনপুট পদ্ধতি
ক্রিয়াটি

উত্তর:


191

এটা চেষ্টা কর:

আপনার বিন্যাসে এটি রেখে / সম্পাদনা করুন:

<EditText
    android:id="@+id/search_edit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:singleLine="true"
    android:imeOptions="actionDone" />

আপনার ক্রিয়াকলাপে এটি রাখুন (উদাহরণস্বরূপ অনক্রিটে):

 // your text box
 EditText edit_txt = (EditText) findViewById(R.id.search_edit);

 edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
         if (actionId == EditorInfo.IME_ACTION_DONE) {
             submit_btn.performClick();
             return true;
         }
         return false;
     }
 });

submit_btnআপনার অন্লিক হ্যান্ডলারের সাথে সংযুক্ত আপনার জমা বোতামটি কোথায় ।


15
submit_btn.performClick();আমার চোখ জ্বলছে শ্লীল? সাবমিট পদ্ধতিতে কল দিচ্ছেন না কেন?
লরেন্ট মায়ার

28
@ লরেন্টমিয়ার সিমুলেটিং ব্যবহারকারী ইনপুট সাধারণত এই পরিস্থিতিতে সরাসরি অন্তর্নিহিত যুক্তি কল করার চেয়ে ভাল। উদাহরণস্বরূপ, সাবমিট বাটনটি বর্তমানে অক্ষম থাকতে পারে, সুতরাং সঞ্চালিত ক্লিক () ইচ্ছাকৃতভাবে কিছুই করবে না, তবে আপনি যদি সরাসরি জমা দেওয়ার পদ্ধতিটি কল করেন তবে আপনাকে পরীক্ষা করতে হবে যে বোতামটি প্রথমে অক্ষম ছিল না। এছাড়া "এ ক্লিক করুন" শব্দ যেন বোতাম চাপড় মেরে হয়েছিল ইত্যাদি খেলবে
Extragorey

4
@ লরেন্টমায়ার ইউআই সংবেদনশীল বলতে কী বোঝ? এবং গত 6 মাসে 5 জন নিশ্চিত, নিশ্চিত। তাদের সময় দিন এবং লোকেরা সম্ভবত আমার সাথেও রাজি হবে। ;)
এক্সট্রাগোরিয়

আসুন বিবেচনা করুন যে আপনি ইউআই পরিবর্তন করেছেন, যা অন্য কোনও কিছুর জন্য বোতামটি ব্যবহার করে। কোডটি একটি সত্যিকারের জগাখিচুড়ি এবং আরও খারাপ হতে পারে, আপনার এই ধরণের বাগটি সনাক্ত করার জন্য সত্যিকারের বিস্তৃত পরীক্ষা পদ্ধতি থাকা দরকার। এমনকি খারাপটি যখন আপনি যেমন অনুশীলনের সাথে ইউআই উপাদান ভাগ করেন।
লরেন্ট মেয়ার 10

4
টিডব্লিউআইএমসি, imeActionLabelআমার এডিটেক্সট ব্যবহার করে এই সমস্ত আচরণ অক্ষম করছিল। সাবধান
Alwin Kesler

25

আপনার নিজের আইএমই বিকল্পগুলি সেট করতে হবে EditText

<EditText
    android:id="@+id/some_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Whatever"
    android:inputType="text"
    android:imeOptions="actionDone" />

তারপরে OnEditorActionListener"সম্পন্ন" ক্রিয়াটি শোনার জন্য ভিউতে একটি যুক্ত করুন।

EditText editText = (EditText) findViewById(R.id.some_view);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            // TODO do something
            handled = true;
        }
        return handled;
    }
});

অফিসিয়াল এপিআই ডক: https://developer.android.com/guide/topics/ui/controls/text.html# ক্রিয়াকলাপ


22

কোটলিনের সাথে সহজ এবং কার্যকর সমাধান

প্রসারিত করুন EditText:

fun EditText.onSubmit(func: () -> Unit) {
    setOnEditorActionListener { _, actionId, _ ->

       if (actionId == EditorInfo.IME_ACTION_DONE) {
           func()
       }

       true

    }
}

তারপরে নতুন পদ্ধতিটি ব্যবহার করুন:

editText.onSubmit { submit() }

submit()এরকম কিছু যেখানে :

fun submit() {
    // call to api
}

আরও জেনেরিক এক্সটেনশন

fun EditText.on(actionId: Int, func: () -> Unit) {
    setOnEditorActionListener { _, receivedActionId, _ ->

       if (actionId == receivedActionId) {
           func()
       }

        true
    }
}

এবং তারপরে আপনি এটি আপনার ইভেন্টটি শুনতে ব্যবহার করতে পারেন:

email.on(EditorInfo.IME_ACTION_NEXT, { confirm() })

6

এটি এভাবেই করা হয়

editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId == EditorInfo.IME_ACTION_DONE){
            //do something
        }
        return false;
   }
});

নিম্নলিখিত যোগ করতে ভুলবেন না

<EditText android:layout_height="wrap_content"

    android:layout_width="wrap_content"

    android:imeOptions="actionDone"/>

আপনার সম্পাদনা পাঠের ক্রিয়া সম্পন্ন করুন।


2

আপনার সম্পাদনা ট্যাগের ভিতরে থাকা আপনার এক্সএমএল ফাইলটিতে স্নিপেটের নীচে যুক্ত করুন

android:imeOptions="actionDone"

তারপরে আপনার জাভা ক্লাসের ভিতরে নীচের কোডটি লিখুন

editText.setOnEditorActionListener(new EditText.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int id, KeyEvent event) { 
        if (id == EditorInfo.IME_ACTION_DONE) { 
            //do something here 
            return true;
        }
        return false; 
    } 
});


1
etParola = (EditText) findViewById(R.id.etParola); 
 btnGiris = (Button) findViewById(R.id.btnGiris);
  etParola.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    btnGiris.performClick();
                    return true;
                }
                return false;
            }
        });

 and;


layout xml etParola
android:imeOptions="actionDone" add

এটি ঠিক যেমন এই উত্তর হিসাবে একই । আপনার কীভাবে এটি মনে হয় ওপির সমস্যার সমাধান করে তা আপনার কিছুটা ব্যাখ্যা করা উচিত।
অ্যাড্রিয়ান ডব্লু

1

শুধু এই উত্তর প্রসারিত করুন

fun EditText.onSubmit(func: () -> Unit) {
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            clearFocus() // if needed 
            hideKeyboard()
            func()
        }
        true
    }
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

0
 EditText edit_txt = (EditText) findViewById(R.id.search_edit);

 edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// which is u had set a imeoption
         if (actionId == EditorInfo.IME_ACTION_DONE) {
             submit_btn.performClick();
             return true;
         }
         return false;
     }
 });

0
<EditText
    android:id="@+id/signinscr_userName"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/userName"
    android:imeOptions="actionNext" />

<EditText
    android:id="@+id/signinscr_password"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/password"
    android:imeOptions="actionDone"
    android:inputType="textPassword" />

জাভা ফাইলের মধ্যে

EditText userNameField = (EditText) findViewById(R.id.signinscr_userName);
EditText passwordField = (EditText) findViewById(R.id.signinscr_password);

passwordField.setOnEditorActionListener(new OnEditorActionListener() {
    public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
        //Do your operation here.
        return false;
    }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.