EditText в Dialog — как добиться нормального поведения клавиатуры? — android клавиатура

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


Всем привет, думаю, что каждый сталкивался с проблемой — клавиатура в EditText в Dialog не открывается при появлении диалога и не закрывается при его закрытии. Давайте в этом вопросе постараемся найти способ заставить клавиатуру вести себя в этом кейсе адекватно.

  1. Открытие по показу диалога
  2. Закрытие по клику на touchOutside
  3. Закрытие по нажатию «назад»
  4. При сворачивании приложения клавиатура остается поверх всего и везде

1) requestFocus — не работает ни в xml, ни в коде, это проверено, есть всякие лайфхаки типа таких

InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
linearLayout.getApplicationWindowToken(),
InputMethodManager.SHOW_FORCED, 0);

Но все это выглядит страшно, нужны какие-то лишние вещи, и вообще это скорее просто открытие клавиатуры в «никуда». Вообще, я считаю, что все манипуляции c InputMethodManager — это большой-большой костыль. Ну просто непонятно, где тут привязка к EditText и, вообще к Dialog. Вообщем, открытие клавиатуры при открытии диалога под вопросом.

2) Закрытие окна при касании на затемненную область экрана (touchOutside) закрывает окно если не выставлен cancelable(false). Так вот, если клавиатура в этот момент открыта то можно наблюдать как она остается поверх всего приложения.

3) По нажатию на кнопку «назад» клавиатура остается а диалог закрывается если был применен тот самый InputMethodManager.

4) Если открыть клавиатуру и выйти из приложения то клавиатура остается поверх всей системы, то есть меню, других приложений, пока ее не закрыть. Этот баг также замечаю в других приложений, к примеру ВКонтакте на экране авторизации…

В библиотеке Material Dialogs все эти баги не наблюдается, все работает как надо, но не понятно как (не найду этого «волшебного кода» в исходниках), также скажу, что вопрос касается скорее обычных Dialog (не DialogFragment)

Автор вопроса: Flippy

Попробуйте сначала решить проблему в первом пункте, все остальные проблемы являются следствием, кмк.

...
dialog.show();
if (dialog.getWindow() != null) {
    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *