Android浮动窗口键盘未显示外窗

时间:2016-06-22 11:15:07

标签: java android keyboard

使用浮动窗口时我的焦点有问题。我目前的代码是:

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点击时显示软键盘。

2 个答案:

答案 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)
    }
}