বোতামটি ক্লিক করতে অ্যান্ড্রয়েড কী-বোর্ডের ডোন বোতামটি ব্যবহার করুন


131

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

package com.michaelpeerman.probability;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;

public class ProbabilityActivity extends Activity implements OnClickListener {

private Button submit;
ProgressDialog dialog;
int increment;
Thread background;
int heads = 0;
int tails = 0;

public void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    setContentView(R.layout.main);
    submit = ((Button) findViewById(R.id.submit));
    submit.setOnClickListener(this);
}

public void onClick(View view) {
    increment = 1;
    dialog = new ProgressDialog(this);
    dialog.setCancelable(true);
    dialog.setMessage("Flipping Coin...");
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    dialog.setProgress(0);
    EditText max = (EditText) findViewById(R.id.number);
    int maximum = Integer.parseInt(max.getText().toString());
    dialog.setMax(maximum);
    dialog.show();
    dialog.setOnCancelListener(new OnCancelListener(){

          public void onCancel(DialogInterface dialog) {

              background.interrupt();
              TextView result = (TextView) findViewById(R.id.result);
                result.setText("heads : " + heads + "\ntails : " + tails);


          }});


    background = new Thread(new Runnable() {
        public void run() {
            heads=0;
            tails=0;
            for (int j = 0; !Thread.interrupted() && j < dialog.getMax(); j++) {
                int i = 1 + new Random().nextInt(2);
                if (i == 1)
                    heads++;
                if (i == 2)
                    tails++;
                progressHandler.sendMessage(progressHandler.obtainMessage());
            }
        }
    });
    background.start();
}

Handler progressHandler = new Handler() {
    public void handleMessage(Message msg) {

        dialog.incrementProgressBy(increment);
        if (dialog.getProgress() == dialog.getMax()) {
            dialog.dismiss();
            TextView result = (TextView) findViewById(R.id.result);
            result.setText("heads : " + heads + "\ntails : " + tails);


        }
    }

};

}


এটি পাঠ্যবাক্স আপডেট হওয়া বোঝায়।
এমপিআরম্যান

আমি যা করতে চাই তা হ'ল এটি আমার কাছে ইতিমধ্যে থাকা একটি বোতামটি ট্রিগার করে। আমি বোতামটি থেকে মুক্তি পেতে চাই না কারণ কিছু লোক হয়তো কীবোর্ডগুলি ব্যবহার করছেন যেগুলি বোতামটি সম্পন্ন করে না।
এমপিআরম্যান

উত্তর:


313

আপনি এটিকেও ব্যবহার করতে পারেন (এডিট টেক্সটে কোনও ক্রিয়া সম্পাদন করা হলে ডাকা একটি বিশেষ শ্রোতা সেট করে), এটি সম্পন্ন এবং প্রত্যাবর্তন উভয়ের জন্যই কাজ করে:

max.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
                Log.i(TAG,"Enter pressed");
            }    
            return false;
        }
    });


3
আপনি হয় সমস্ত কোডটি একক ফাংশনে স্থানান্তর করতে পারেন এবং তারপরে কল করতে পারেন বা পারফরম্যান্স ক্লিক করুন ()
vladexologija

6
ডোন বোতামটি আঘাত করার সময় এটি আমার পক্ষে কাজ করেনি, কী-ইনভেন্টটি সর্বদা শূন্য ছিল .. অ্যাকশনটি তবে EditorInfo.IME_ACTION_DONE এ সেট করা হয়েছিল এবং আমি তার পরিবর্তে এটি ব্যবহার করতে সক্ষম হয়েছি। (এটি অ্যান্ড্রয়েড 4..২.২ এ রয়েছে এবং এই মুহূর্তে অ্যান্ড্রয়েড এসডিকি ডকুমেন্টেশনের সাথেও মেলে না)
জেমস

28

আপনি চেষ্টা করতে পারেন IME_ACTION_DONE

এই ক্রিয়াটি ইনপুট না করার জন্য "সম্পন্ন" অপারেশন করে এবং আইএমই বন্ধ হয়ে যাবে।

 Your_EditTextObj.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                boolean handled = false;
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                  /* Write your logic here that will be executed when user taps next button */


                    handled = true;
                }
                return handled;
            }
        });

8
এটি আমার জন্য নিখুঁত কাজ করে। সত্য ফেরত দেওয়ার বিষয়ে সতর্ক থাকুন। কীবোর্ড প্রদর্শিত থাকে। আপনি যদি কীবোর্ডটি লুকিয়ে রাখতে চান তবে মিথ্যা ফিরুন।
মাতওয়স্ক

1
রত্নের মতো কাজ করে!
স্যাম

16

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

max.setOnKeyListener(new OnKeyListener(){
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event){
        if(keyCode == event.KEYCODE_ENTER){
            //do what you want
        }
    }
});

আপনি যখন কোনও বাটনে চাপ দিচ্ছেন আপনার ভিউ অন্কি ইভেন্টটি উত্পন্ন করে এবং কী কোড যখন ডান বোতামটির সাথে মিলে যায় তখন এটি আপনার পছন্দসই কিছু করে
রোমান ব্ল্যাক

1
বোতামটির ফোকাস থাকতে হবে
জেফ্রি ব্লাটম্যান

8

জামারিন.এন্ড্রয়েডের জন্য এটি ব্যবহার করে দেখুন (ক্রস প্ল্যাটফর্ম)

edittext.EditorAction += (object sender, TextView.EditorActionEventArgs e) {
       if (e.ActionId.Equals (global::Android.Views.InputMethods.ImeAction.Done)) {
           //TODO Something
       }
};

7

কোটলিন সলিউশন

কোটলিনে সম্পন্ন ক্রিয়াটি পরিচালনা করার মূল উপায় হ'ল:

edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Call your code here
        true
    }
    false
}

কোটলিন এক্সটেনশন

edittext.onDone {/*action*/}আপনার মূল কোডটিতে কল করতে এটি ব্যবহার করুন । এটি আরও পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য রাখে

edittext.onDone { submitForm() }

fun EditText.onDone(callback: () -> Unit) {
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

আপনার সম্পাদনা পাঠ্যে এই বিকল্পগুলি যুক্ত করতে ভুলবেন না

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

আপনার যদি inputType="textMultiLine"সমর্থন দরকার হয় তবে এই পোস্টটি পড়ুন


4

আপনি লগইনঅ্যাক্টিভিটি তৈরি করার সময় আমি অ্যান্ড্রয়েডস্টুডিও থেকে নিম্নলিখিত কোডটি অনুলিপি করেছি। আমি ime বৈশিষ্ট্যগুলি ব্যবহার করি

আপনার বিন্যাসে

<EditText android:id="@+id/unidades" android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:hint="@string/prompt_unidades"
                    android:inputType="number" android:maxLines="1"
                    android:singleLine="true"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:enabled="true" android:focusable="true"
                    android:gravity="right"
                    android:imeActionId="@+id/cantidad"
                    android:imeActionLabel="@string/add"
                    android:imeOptions="actionUnspecified"/>

আপনার ক্রিয়াকলাপে

editTextUnidades.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == R.id.cantidad || actionId == EditorInfo.IME_NULL) {
                addDetalle(null);
                return true;
            }
            return false;
        }
    });

2

আপনি মূল শ্রোতার উপর প্রয়োগ করতে পারেন:

public class ProbabilityActivity extends Activity implements OnClickListener, View.OnKeyListener {

অনক্রিটে:

max.setOnKeyListener(this);

...

@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
    if(keyCode == event.KEYCODE_ENTER){
        //call your button method here
    }
    return true;
}

1

আপনি যদি কোনও কাজ বাটন ক্লিকের মতো আপনার ইভেন্টটি করতে চান যা করার জন্য কীবোর্ড এন্টার বোতামটি ধরতে চান তবে আপনি এই পাঠ্য দর্শনের জন্য নীচের সহজ কোডটি লিখতে পারেন

Edittext ed= (EditText) findViewById(R.id.edit_text);

ed.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Do you job here which you want to done through event
    }
    return false;
}
});

1

কোটলিন এবং সংখ্যাসূচক কীবোর্ড

আপনি যদি সংখ্যার কীবোর্ডটি ব্যবহার করেন তবে আপনাকে কীবোর্ড খারিজ করতে হবে, এটি এমন হবে:

editText.setOnEditorActionListener { v, actionId, event ->
  if (action == EditorInfo.IME_ACTION_DONE || action == EditorInfo.IME_ACTION_NEXT || action == EditorInfo.IME_ACTION_UNSPECIFIED) {
      //hide the keyboard
      val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
      imm.hideSoftInputFromWindow(windowToken, 0)
      //Take action
      editValue.clearFocus()
      return true
  } else {
      return false
  }
}

0

আপনার বিন্যাসে এই শ্রেণিটি ব্যবহার করুন:

public class ActionEditText extends EditText
{
    public ActionEditText(Context context)
    {
        super(context);
    }

    public ActionEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public ActionEditText(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs)
    {
        InputConnection conn = super.onCreateInputConnection(outAttrs);
        outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
        return conn;
    }

}

এক্সএমএলে:

<com.test.custom.ActionEditText
                android:id="@+id/postED"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@android:color/transparent"
                android:gravity="top|left"
                android:hint="@string/msg_type_message_here"
                android:imeOptions="actionSend"
                android:inputType="textMultiLine"
                android:maxLines="5"
                android:padding="5dip"
                android:scrollbarAlwaysDrawVerticalTrack="true"
                android:textColor="@color/white"
                android:textSize="20sp" />

0
max.setOnKeyListener(new OnKeyListener(){
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event){
    if(keyCode == event.KEYCODE_ENTER){
        //do what you want
    }
  }
});

1
আপনার কোড সম্পর্কে মন্তব্য সর্বদা একটি উত্তরের পঠনযোগ্যতার উন্নতি করে ...
জ্যাক

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, কেবল এখনই জিজ্ঞাসা করা ব্যক্তি নয়! একটি ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন এবং কোন সীমাবদ্ধতা এবং অনুমানগুলি প্রযোজ্য তা একটি ইঙ্গিত দিন। এই উত্তরটি কেন অন্যদের চেয়ে বেশি উপযুক্ত তা উল্লেখ করেও ক্ষতি করে না।
দেব-আইএল

0

আপনার শেষ সম্পাদনা .setOnEditorActionListener এই পদ্ধতিটি স্বয়ংক্রিয়ভাবে হিট এপিআই কল করুন

আমি_এটি পাসওয়ার্ডে লগইনঅ্যাক্টিভিটিতে কল ছিল

 et_Pass.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {

                    Log.i(TAG,"Enter pressed");
                    Log.i(Check Internet," and Connect To Server");

                }
                return false;
            }
        });

ওয়ার্কিং ফাইন


0

এবং এটি একটি কোটলিন সংস্করণ:

editText.setOnEditorActionListener { v, actionId, event ->
  if(actionId == EditorInfo.IME_ACTION_DONE){
      //Put your action there
      true
  } else {
      false
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.