Хотя большинство людей ответили на вопрос напрямую, я хотел бы подробнее остановиться на концепции, стоящей за ним. Во-первых, меня привлекло внимание IME, когда я создал активность по умолчанию для входа. Это сгенерировало некоторый код для меня, который включал следующее:
<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"/>
Вы уже должны быть знакомы с атрибутом inputType. Это просто сообщает Android тип ожидаемого текста, например адрес электронной почты, пароль или номер телефона. Полный список возможных значений можно найти здесь .
Однако атрибутом imeOptions="actionUnspecified"
было то, что я не понимал его цели. Android позволяет вам взаимодействовать с клавиатурой, которая появляется из нижней части экрана, когда текст выделен с помощью InputMethodManager
. В нижнем углу клавиатуры есть кнопка, обычно она говорит «Далее» или «Готово», в зависимости от текущего текстового поля. Android позволяет настроить это, используя android:imeOptions
. Вы можете указать кнопку «Отправить» или «Далее». Полный список можно найти здесь .
При этом вы можете прослушивать нажатия на кнопку действия, задав TextView.OnEditorActionListener
для элемента EditText
. Как в вашем примере:
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;
}
});
Теперь в моем примере у меня есть атрибут android:imeOptions="actionUnspecified"
. Это полезно, когда вы хотите попытаться войти в систему, когда пользователь нажимает клавишу ввода. В своей активности вы можете обнаружить этот тег и затем попытаться войти в систему:
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;
}
});