Si bien la mayoría de las personas ha respondido la pregunta directamente, quería dar más detalles sobre el concepto detrás de ella. Primero, me llamó la atención de IME cuando creé una actividad de inicio de sesión predeterminada. Me generó un código que incluía lo siguiente:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
Ya debería estar familiarizado con el atributo inputType. Esto solo informa a Android el tipo de texto esperado, como una dirección de correo electrónico, contraseña o número de teléfono. La lista completa de valores posibles se puede encontrar aquí .
Sin embargo, era el atributo imeOptions="actionUnspecified"
que no entendía su propósito. Android le permite interactuar con el teclado que aparece desde la parte inferior de la pantalla cuando se selecciona texto usando InputMethodManager
. En la esquina inferior del teclado, hay un botón, por lo general dice "Siguiente" o "Listo", según el campo de texto actual. Android te permite personalizar esto usando android:imeOptions
. Puede especificar un botón "Enviar" o un botón "Siguiente". La lista completa se puede encontrar aquí .
Con eso, puede escuchar las pulsaciones en el botón de acción definiendo un TextView.OnEditorActionListener
para el EditText
elemento. Como en tu ejemplo:
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
Ahora en mi ejemplo tenía android:imeOptions="actionUnspecified"
atributo. Esto es útil cuando desea intentar iniciar sesión en un usuario cuando presiona la tecla Intro. En su Actividad, puede detectar esta etiqueta y luego intentar iniciar sesión:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});