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
这些标志给出了我想要的结果,希望它能帮助有同样经历的人。
当我的应用程序不在前台 运行 时,我将 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
这些标志给出了我想要的结果,希望它能帮助有同样经历的人。