Podczas gdy większość ludzi odpowiedziała bezpośrednio na to pytanie, chciałem bardziej szczegółowo rozwinąć koncepcję tego pytania. Po pierwsze, zwróciłem uwagę IME, kiedy utworzyłem domyślną aktywność logowania. Wygenerował dla mnie trochę kodu, który obejmował:
<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"/>
Powinieneś już być zaznajomiony z atrybutem inputType. To tylko informuje Androida o oczekiwanym typie tekstu, takim jak adres e-mail, hasło lub numer telefonu. Pełna lista możliwych wartości znajduje się tutaj .
Był to jednak atrybut imeOptions="actionUnspecified"
, że nie rozumiałem jego celu. Android pozwala na interakcję z klawiaturą, która wyskakuje z dołu ekranu, gdy tekst jest zaznaczany za pomocą InputMethodManager
. W dolnym rogu klawiatury znajduje się przycisk, zwykle z napisem „Dalej” lub „Gotowe”, w zależności od bieżącego pola tekstowego. Android pozwala to dostosować za pomocą android:imeOptions
. Możesz określić przycisk „Wyślij” lub „Dalej”. Pełna lista znajduje się tutaj .
Dzięki temu możesz nasłuchiwać nacisków na przycisku akcji, definiując element TextView.OnEditorActionListener
dla EditText
elementu. Jak w twoim przykładzie:
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;
}
});
Teraz w moim przykładzie miałem android:imeOptions="actionUnspecified"
atrybut. Jest to przydatne, gdy chcesz spróbować zalogować się do użytkownika po naciśnięciu klawisza Enter. W swojej aktywności możesz wykryć ten tag, a następnie spróbować zalogować się:
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;
}
});