【问题标题】:how to avoid window view to come over Keyboard?如何避免窗口视图超过键盘?
【发布时间】:2016-03-30 10:11:52
【问题描述】:

我在底部有窗口视图,当我点击任何编辑文本时,键盘会打开但在窗口视图下方(Windowview 出现在键盘上方)。 尝试使用adjustPan,adjustResize。 尝试根据键盘可见性使用显示隐藏视图,但它给出了安全异常。

 mTabParams = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSPARENT);

        mTabParams.format = PixelFormat.TRANSLUCENT;
        mTabParams.height = TAB_BAR_HEIGHT;
        mTabParams.gravity = Gravity.BOTTOM;
        mWindowmanager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        mWindowmanager.addView(mTabbarLayout, mTabParams);

【问题讨论】:

  • int TYPE_SYSTEM_OVERLAY Window type: system overlay windows, which need to be displayed on top of everything else. 所以尝试删除该标志,看看是否有帮助。

标签: android android-windowmanager


【解决方案1】:

这对我有用:

params = new WindowManager.LayoutParams( 
    WindowManager.LayoutParams.WRAP_CONTENT, 
    WindowManager.LayoutParams.WRAP_CONTENT, 
    WindowManager.LayoutParams.TYPE_PRIORITY_PHONE, 
    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
    WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | 
    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, 
    PixelFormat.TRANSLUCENT);

这会将添加的视图放在键盘后面。

【讨论】:

  • 具体我发现 FLAG_NOT_FOCUSABLE | FLAG_ALT_FOCUSABLE_IM 是需要的标志,其他标志是可选的,具体取决于您的具体需求
猜你喜欢
  • 2020-07-25
  • 2020-10-14
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多