Android 9(Android Pie)中输入法服务的显示对话框

时间:2018-08-18 08:05:38

标签: android android-9.0-pie

我的应用程序包括带有特殊按钮的输入法服务,该按钮会弹出一个对话框。对于使用Android 9的用户,此对话框无法正确显示,只有IME上方的部分可见:

enter image description here

创建对话框的代码是

    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,但这也无济于事。

对此有任何简单的解决方法吗?

2 个答案:

答案 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都不起作用,我认为我们可以使用浮动视图,如下所示:

  1. 自定义视图,使其看起来像一个对话框。
  2. 使用WindowManager添加视图,该视图将显示在任何android应用程序的顶部。我是从FlowtingExample
  3. 中学到的

我尝试使用它。它可以在Android P上使用。但是,此方法在全局键方面存在严重问题:

当从键盘显示“对话框”时,用户按全局键(如Home键)。

=>显示主屏幕。但是,“对话框”和键盘仍在显示。

(是否有解决此限制的方法?)

(我听说Google键盘(Gboard)的语言选择对话框可以在Android P上正常运行。但是我找不到Gboard的源代码。总有办法得到它吗?)

对不起,我对stackoverflow完全陌生,我认为我应该将其发布到评论部分,但是我不能这样做,因为我没有足够的50个声誉。