Диалоговое окно отображения из службы ввода в Android 9 (Android Pie)
Мое приложение включает в себя службу ввода метода со специальной кнопкой, которая вызывает диалог. Для пользователей с Android 9 это диалоговое окно отображается некорректно, видна только часть над IME:
Код для создания диалога
AlertDialog dialog = builder.create();
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
LatinKeyboardView inputView = mKeyboardSwitcher.getInputView();
lp.token = inputView.getWindowToken();
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.show();
что аналогично описанному в /questions/8794734/kak-zapustit-popupwindow-ili-dialog-iz-sluzhbyi-vvoda/8794743#8794743
Я тоже пробовал TYPE_APPLICATION_PANEL
как предложено в /questions/11182359/android-ime-kak-pokazat-vsplyivayuschee-dialogovoe-okno/11182369#11182369 но это тоже не помогает.
Есть ли какое-нибудь легкое решение для этого?
1 ответ
Проблема может быть исправлена с помощью WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG вместо TYPE_APPLICATION_ATTACHED_DIALOG и запроса android.permission.SYSTEM_ALERT_WINDOW.
Подробное изменение здесь: https://github.com/osfans/trime/commit/d8e9da2dfe2653c94cd4aecba00728b7a910cbb8
Если оба PopupWindow и AlertDialog не работают, я думаю, что мы можем использовать плавающее представление, например так:
- Настройте вид, сделайте его похожим на диалог.
- Используйте WindowManager, чтобы добавить вид, вид будет отображаться поверх любого приложения для Android. Я узнал это из FlowtingExample
Я пытался использовать это. Он работает на Android P. Однако этот метод вызывает серьезные проблемы с глобальными ключами:
Когда "диалог" отображается на клавиатуре, пользователь нажимает глобальную клавишу, например клавишу "Домой".
=> Отображается домашний экран. Но "диалог" и клавиатура все еще отображаются.
(Есть ли способ исправить это ограничение?).
(Я слышал, что диалог выбора языка с клавиатуры Google (Gboard) отлично работает на Android P. Но я не могу найти исходный код Gboard. Есть ли способ его получить?)
Извините, я совсем новичок в stackru, думаю, мне следует опубликовать это в разделе комментариев, но я не могу этого сделать, потому что мне не хватает 50 репутаций.