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