【问题标题】:Android floating window keyboard not showing outside windowAndroid浮动窗口键盘不显示在窗口外
【发布时间】:2016-10-24 07:12:45
【问题描述】:

我在使用浮动窗口时遇到焦点问题。我当前的代码是:

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

【问题讨论】:

标签: java android keyboard


【解决方案1】:

您可以尝试如下:

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

【讨论】:

    【解决方案2】:

    没关系。我使用了一个名为 StandOut (http://pingpongboss.github.io/StandOut/) 的库。它以某种方式设法做上述事情。我查看了源代码,但我无法真正弄清楚它在做什么来完成这项工作,所以我只是重写了我的项目的一部分以使其与这个库兼容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多