Android Utilice el botón Listo en Teclado para hacer clic en el botón
Ok en mi aplicación tengo un campo para que el usuario ingrese un número. Tengo el campo establecido para sólo aceptar números. Cuando el usuario hace clic en el campo que muestra el teclado. En el teclado (en ICS) hay un botón hecho. Me gustaría que el botón hecho en el teclado para activar el botón de envío que tengo en mi aplicación. Mi código es el siguiente.
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); } } }; }
- Android El teclado suave flotará solo un diseño específico
- DialogFragment no funciona con SOFT_INPUT_ADJUST_PAN
- EditText no es visible con el teclado abierto
- AlertDialog con EditText, abre el teclado virtual automáticamente con el enfoque en EditText no funciona
- ¿Son compatibles todos los caracteres Unicode en Android?
- Teclado personalizado como el teclado gif en android
- Mostrar teclado numérico en un WebView
- El teclado suave oculta la mitad de EditText
- ¿La interfaz de usuario se bloquea cuando se muestra el software mientras se reproduce el reproductor de medios?
- keyBackground para teclas especiales - teclado android
- Android show softkeyboard con showSoftInput no funciona?
- ¿Por qué aparece el teclado de Android al agregar un ListView?
- El teclado suave no activa el desplazamiento en un ScrollView
Puede utilizar este también (establece un oyente especial para ser llamado cuando se realiza una acción en el EditText), funciona tanto para DONE y 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; } });
Prueba esto:
max.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event){ if(keyCode == event.KEYCODE_ENTER){ //do what you want } } });
Puedes probar con IME_ACTION_DONE
Esta acción realiza una operación "done" para que nada ingrese y el IME se cerrará.
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; } });
Pruebe esto para Xamarin.Android (Cross Platform)
edittext.EditorAction += (object sender, TextView.EditorActionEventArgs e) { if (e.ActionId.Equals (global::Android.Views.InputMethods.ImeAction.Done)) { //TODO Something } };
Copié el siguiente código de AndroidStudio cuando creas una LoginActivity. Utilizo los atributos ime
En su diseño
<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"/>
En su actividad
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; } });
Puede implementar en el oyente dominante:
public class ProbabilityActivity extends Activity implements OnClickListener, View.OnKeyListener {
En 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; }
Utilice esta clase en su diseño:
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 } } });
- Proceso se bloquea durante la creación del inyector de RoboGuice, si hay una instancia burlada en cualquier módulo
- ¿Cómo imitar el comportamiento de las fases 3 de la parte inferior de Google Maps?