Как одновременно скрыть виртуальную клавиатуру и EditText?
Суть вопроса: есть активити, на нем EditText(невидимый) и кнопка, при нажатии на которую EditText становится видимым и всплывает виртуальная клавиатура. При нажатии на Back клавиатура скрывается, а EditText остается видимым и заполенным. При повторном нажатии на Back скрывается и очищается EditText, а идея в их одновременном скрытии. Подскажите пожалуйста в чем дело и как с этим справиться, заранее спасибо.
/////////////////////////////////////////////////////////////
editText.setVisibility(View.VISIBLE);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
editText.requestFocus();
///////////////////////////////////////////////////////////////////
@Override
public void onBackPressed() {
//super.onBackPressed();
editText.setText(null);
editText.setFocusable(false);
editText.setVisibility(View.INVISIBLE);
}
Попробовал не работает.
Проблема в том, что при первом нажатии на назад происходит само собой скрытие клавы, НЕ ЗАХОДЯ в метод onBackPressed (так говорит дебагер и здравый смысл:) ), что самое то и интересное для меня, не понимаю почему именно так. Зато при повторном нажатии все ок, происходит скрытие и очистка вьюшки.
Прояви фантазию) В методе "onBackPressed" проверяй, если фокус установлен на TextView И открыта клавиатура, выполни очистку и скрытие элемента, а в на вывод результата сделай "true".
Либо можно задать обработчик для клавиатуры: если происходит закрытие клавиатуры И фокус установлен на TextView, произвести очистку объекта. Это легко ищется в Google.
Alex Marken, я разобрался с вопросом, там нужно было пробрасывать событие нажатия на клавишу назад в обработчик, т.к. иначе происходит вышеописанная ситуация(клава закрывается, а View не скрывается ) Пришлось создать кастомный EditText с (public class CustomEditText extends EditText) переопределенным методом onKeyPreIme(int keyCode, KeyEvent event)
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
dispatchKeyEvent(event);
return false;
}
return super.onKeyPreIme(keyCode, event);
}
Вот не знаю на соклько это костыльное решение) но оно работает)