使用浮动窗口时我的焦点有问题。我目前的代码是:
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(
200, 200, WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
parameters.gravity = Gravity.CENTER;
RelativeLayout layoutView = new RelativeLayout(this);
...
windowManager.addView(layoutView, parameters);
问题是,使用此代码时,只有浮动窗口是可聚焦的。我已经尝试更改标志,但始终只有浮动窗口或后台应用程序是可聚焦的(因此当我单击EditText
时会出现键盘。
我希望浮动窗口和后台应用程序都能够在EditText
点击时显示软键盘。
答案 0 :(得分:0)
没关系。我使用了名为StandOut(http://pingpongboss.github.io/StandOut/)的库。它以某种方式设法做上述事情。我查看了源代码,但我无法弄清楚它是如何做的,所以我只是重写了我的项目的一部分,使它与这个库兼容
答案 1 :(得分:0)
您可以尝试如下操作:
this.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_OUTSIDE) {
updateLayoutParamFlag(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
}
return@setOnTouchListener false
}
mEditText.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
updateLayoutParamFlag(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)
}
return@setOnTouchListener false
}
fun updateLayoutParamFlag(flags: Int) {
if (mlayoutParams.flags != flags) {
mlayoutParams.flags = flags
mWindowManager.updateViewLayout(this, mlayoutParams)
}
}