#android #dialog #back #android-softkeyboard
#Android #диалоговое окно #Назад #android-softkeyboard
Вопрос:
Я создал логику для отображения диалогового окна подтверждения, когда пользователь нажимает кнопку «Назад», переопределяя метод backPressed, но это подразумевает необычное поведение. Если отображается клавиатура с программным вводом, при событии обратной клавиши она должна быть скрыта, а другое событие обратной клавиши должно запускать диалоговое окно подтверждения. Есть способ добиться этого? Может быть, путем определения, включена ли клавиатура мягкого ввода, и обойти диалоговое окно подтверждения?
Вот пример кода, чтобы прояснить это:
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
//here is the mystery
if (soft keyboard is visible)
{
return super.onKeyUp(keyCode, event);
} else
{
//method which shows the close dialog and close the application
onBackPressed();
return true;
}
}
return super.onKeyUp(keyCode, event);
}
Ответ №1:
если отображается программная клавиатура, я не думаю, что Activity может получить событие возврата ключа. поведение по умолчанию — клавиша возврата, заставляющая программную клавиатуру исчезать.
Просмотр также может блокировать ключевое событие, простой способ — setOnKeyListener. убедитесь, что ваше представление можно сфокусировать, и когда оно получит событие возврата ключа, просто верните true .
Комментарии:
1. Да, вы правы. Реальная проблема заключалась в том, что у меня были переопределены как onKeyDown, так и onKeyUp, и это привело к двойному обратному нажатию. Теперь у меня переопределен только onKeyDown, а программная клавиатура использует событие. Было обнаружено еще одно странное поведение, то есть, когда перехватывается новое событие возврата ключа, onBackPressed игнорируется. Я должен справиться с этим. Спасибо за хороший ответ.
Ответ №2:
Код для скрытия программной клавиатуры :
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
вы можете поместить этот код на backkeypressed независимо от того, отображается клавиатура или нет
Комментарии:
1. Спасибо за ответ. Моя реальная проблема в том, что клавиатура использует мое обратное событие, а затем отображается диалоговое окно подтверждения закрытия (то же самое обратное событие). Чего я действительно хочу, так это создать логику, которая показывает диалоговое окно подтверждения только тогда, когда на экране нет помех (программная клавиатура, выпадающий список spinner и т. Д.).