Mentre la maggior parte delle persone ha risposto direttamente alla domanda, volevo approfondire il concetto alla base. Innanzitutto, sono stato attratto dall'IME quando ho creato un'attività di accesso predefinita. Ha generato un codice per me che includeva quanto segue:
<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"/>
Dovresti già avere familiarità con l'attributo inputType. Questo informa solo Android del tipo di testo previsto, come un indirizzo e-mail, una password o un numero di telefono. L'elenco completo dei possibili valori è disponibile qui .
Era, tuttavia, l'attributo imeOptions="actionUnspecified"
che non ho capito il suo scopo. Android ti consente di interagire con la tastiera che si apre dalla parte inferiore dello schermo quando il testo è selezionato usando il InputMethodManager
. Nell'angolo in basso della tastiera, c'è un pulsante, in genere dice "Avanti" o "Fatto", a seconda del campo di testo corrente. Android ti consente di personalizzare questo usando android:imeOptions
. È possibile specificare un pulsante "Invia" o "Avanti". L'elenco completo è disponibile qui .
Con ciò, puoi quindi ascoltare le pressioni sul pulsante di azione definendo a TextView.OnEditorActionListener
per l' EditText
elemento. Come nel tuo esempio:
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;
}
});
Ora nel mio esempio avevo un android:imeOptions="actionUnspecified"
attributo. Ciò è utile quando si desidera provare ad accedere a un utente quando premono il tasto Invio. Nella tua attività, puoi rilevare questo tag e quindi tentare l'accesso:
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;
}
});