Android: 请求关注通过 WindowManager 添加的视图 (WebView)

Android: Request focus on view (WebView) added via WindowManager

当我的应用程序不在前台 运行 时,我将 webView 作为来自服务的 alertDialog 显示,因此,我的 webView 附加到屏幕通过 WindowManager.addView() 方法。

webView 有一个 input 字段,我希望用户可以访问该字段。不幸的是,当用户单击 input 字段时, 它不会显示键盘以供用户允许输入

我的 webView 在一个 cardView 里面,他的参数如下:

public WindowManager.LayoutParams getParamsForOpenWebView() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                        | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.START | Gravity.TOP;
        params.x = left;
        params.y = top;

        return params;
    } else {
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                        | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                PixelFormat.TRANSLUCENT);


        params.gravity = Gravity.START | Gravity.TOP;
        params.x = left;
        params.y = 200;

        return params;
    }
}

如果我将 phone 连接到我的笔记本电脑并使用笔记本电脑键盘向输入字段添加输入,它工作正常,但只是 phone 上的键盘不会弹出 -向上。

此外,输入在 webView 内,因此我无法使用 View.requestFocus() 获得焦点,这与 EditText 不同。

对于如何请求关注 webView 以允许输入的任何帮助,我将不胜感激。

一段时间后自己找到了问题的答案。

我尝试了很多不同标志的组合,但 none 奏效了,除非我尝试了

WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                    | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

这些标志给出了我想要的结果,希望它能帮助有同样经历的人。