Android: Скрытие клавиатуры в переопределенном "Готово" нажатии EditText
Я использовал немного кода Android для переопределения кнопки "Готово" в поле EditText:
myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mySubroutine();
return true;
}
return false;
}
});
Активация поля вызывает клавиатуру, и нажатие "Готово" успешно оценивает mySubroutine(). Однако клавиатура больше не исчезает, когда я нажимаю "Готово" . Как восстановить это поведение по умолчанию для этой процедуры?
Ответы
Ответ 1
Почему бы и нет:
myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mySubroutine();
}
return false;
}
});
Просто верните значение false после обработки кода. Это можно интерпретировать как независимо от того, что ваш код (mySubroutine()), по-прежнему будет использовать действие по умолчанию впоследствии. Если вы вернете "истину", вы говорите, что вы счастливый кодер, и все, что нужно было сделать, произошло в вашем mySubroutine(), и действие по умолчанию не нужно предпринимать.
Ответ 2
Вы можете закрыть клавиатуру, выполнив следующие действия:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
Ответ 3
Вы должны прикрепить onClickListener к кнопке, которая выполняет следующий код:
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);
Ответ 4
У меня была та же проблема. Сразу после изменения editText VISIBILITY от GONE до VISIBLE мне пришлось установить фокус и отобразить мягкую клавиатуру. Я достиг этого, используя следующий код:
(new Handler()).postDelayed(new Runnable() {
public void run() { yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 200);