我的应用程序包括带有特殊按钮的输入法服务,该按钮会弹出一个对话框。对于使用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();
与https://stackoverflow.com/a/13962770/292233
中所述的相同我也按照https://stackoverflow.com/a/3508462/292233的建议尝试了TYPE_APPLICATION_PANEL
,但这也无济于事。
对此有任何简单的解决方法吗?
答案 0 :(得分:1)
可以通过使用WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG而不是TYPE_APPLICATION_ATTACHED_DIALOG并请求android.permission.SYSTEM_ALERT_WINDOW来解决此问题。
详细的更改在这里: https://github.com/osfans/trime/commit/d8e9da2dfe2653c94cd4aecba00728b7a910cbb8
答案 1 :(得分:0)
如果PopupWindow和AlertDialog都不起作用,我认为我们可以使用浮动视图,如下所示:
我尝试使用它。它可以在Android P上使用。但是,此方法在全局键方面存在严重问题:
当从键盘显示“对话框”时,用户按全局键(如Home键)。
=>显示主屏幕。但是,“对话框”和键盘仍在显示。
(是否有解决此限制的方法?)
(我听说Google键盘(Gboard)的语言选择对话框可以在Android P上正常运行。但是我找不到Gboard的源代码。总有办法得到它吗?)
对不起,我对stackoverflow完全陌生,我认为我应该将其发布到评论部分,但是我不能这样做,因为我没有足够的50个声誉。