Хотя большинство людей ответили на вопрос напрямую, я хотел бы подробнее остановиться на концепции, стоящей за этим. Во-первых, я привлек внимание 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;
}
});