web-dev-qa-db-fra.com

Android Utilisez le bouton Terminé sur le clavier pour cliquer sur le bouton

Ok dans mon application, j'ai un champ pour que l'utilisateur entre un numéro. J'ai le champ défini pour n'accepter que des nombres. Lorsque l'utilisateur clique sur le champ, le clavier apparaît. Sur le clavier (sur ICS), il y a un bouton Terminé. J'aimerais que le bouton Terminé du clavier déclenche le bouton de soumission que j'ai dans mon application. Mon code est comme suit.

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


        }
    }

};

}
114
mpeerman

Vous pouvez aussi utiliser celui-ci (un écouteur spécial doit être appelé lorsqu'une action est effectuée sur l'EditText), cela fonctionne aussi bien pour DONE que pour RETURN:

max.setOnEditorActionListener(new 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");
            }    
            return false;
        }
    });
281
vladexologija

Vous pouvez essayer avec IME_ACTION_DONE .

Cette action effectue une opération “done” sans rien entrer et le IME sera fermé.

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

Essaye ça:

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

Essayez ceci pour Xamarin.Android (Cross Platform)

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

J'ai copié le code suivant depuis AndroidStudio lorsque vous créez un LoginActivity . J'utilise les attributs ime

Dans votre mise en page

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

Dans votre activité

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

Vous pouvez implémenter sur un auditeur de clé:

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

Dans 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

si vous voulez intercepter le bouton d'entrée du clavier pour effectuer votre travail que vous souhaitez effectuer par le biais d'un événement comme un clic de souris, vous pouvez écrire le code simple ci-dessous pour cette vue de texte

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

Utilisez cette classe dans votre mise en page:

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

}

En 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

Your Last Edittext .setOnEditorActionListener appelle cette méthode hit automatique api

J'ai été appelé dans LoginActivity dans et_password

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

Fonctionne bien

0
Keshav Gera