web-dev-qa-db-ja.com

Androidキーボードの[完了]ボタンを使用してボタンをクリックします

私のアプリでは、ユーザーが数値を入力するフィールドがあります。数字のみを受け入れるようにフィールドを設定しています。ユーザーがフィールドをクリックすると、キーボードが表示されます。キーボード(ICS)には、完了ボタンがあります。キーボードの完了ボタンを使用して、アプリケーションにある送信ボタンをトリガーします。私のコードは次のとおりです。

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);


        }
    }

};

}
116
mpeerman

これも使用できます(EditTextでアクションが実行されるときに呼び出される特別なリスナーを設定します)。DONEとRETURNの両方で機能します。

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;
        }
    });
288
vladexologija

IME_ACTION_DONE で試すことができます。

このアクションは、何も入力しないと「完了」操作を実行し、IMEは閉じられます。

 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;
            }
        });
19
IntelliJ Amiya

これを試して:

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

Xamarin.Android(クロスプラットフォーム)でこれを試してください

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

LoginActivityを作成するときに、Android Studioから次のコードをコピーしました。 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;
        }
    });
4
Juan Rojas

キーリスナーに実装できます:

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

OnCreateで:

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;
}
2
TinMan

ボタンクリックなどのイベントを通じてやりたい仕事をするためにキーボードのエンターボタンをキャッチしたい場合は、そのテキストビュー用に以下の簡単なコードを書くことができます

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
Nadeem Bhat

レイアウトでこのクラスを使用します。

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;
    }

}

Xmlで:

<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
Yogendra
max.setOnKeyListener(new OnKeyListener(){
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event){
    if(keyCode == event.KEYCODE_ENTER){
        //do what you want
    }
  }
});
0
RkKhanpuriya

最後のEdittext .setOnEditorActionListenerは、このメソッドを自動ヒットAPIで呼び出します

et_passwordのLoginActivityで呼び出していた

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

Working Fine

0
Keshav Gera