1

我的应用程序包含一个带有特殊按钮的输入法服务,该按钮会弹出一个对话框。对于使用 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/292233TYPE_APPLICATION_PANEL中的建议进行了尝试,但这也无济于事。

有什么简单的解决方法吗?

4

2 回答 2

1

该问题可以通过使用 WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG 而不是 TYPE_APPLICATION_ATTACHED_DIALOG 并请求 android.permission.SYSTEM_ALERT_WINDOW 来解决。

详细更改在这里: https ://github.com/osfans/trime/commit/d8e9da2dfe2653c94cd4aecba00728b7a910cbb8

于 2018-12-17T08:16:11.577 回答
0

如果 PopupWindow 和 AlertDialog 都不起作用,我认为我们可以使用浮动视图,如下所示:

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

我尝试使用它。它适用于 Android P。但是,这种方法对全局键有严重的问题:

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

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

(有没有办法解决这个限制?)。

(我听说 Google 键盘(Gboard)的语言选择对话框在 Android P 上完美运行。但我找不到 Gboard 的源代码。有没有办法得到它?)

抱歉,我对 stackoverflow 完全陌生,我想我应该将其发布到评论部分,但我不能这样做,因为我没有足够的 50 名声望。

于 2018-11-18T15:29:30.273 回答