类型为“ TYPE_ACCESSIBILITY_OVERLAY”的叠加层会隐藏导航按钮

我正在使用以下布局参数向Windows Manager添加视图:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.TYPE_accESSIBILITY_OVERLAY,WindowManager.LayoutParams.flaG_NOT_TOUCHABLE |
            WindowManager.LayoutParams.flaG_NOT_FOCUSABLE |
            WindowManager.LayoutParams.flaG_ALT_FOCUSABLE_IM |
            WindowManager.LayoutParams.flaG_WATCH_OUTSIDE_TOUCH,PixelFormat.TRANSLUCENT
);

预期结果是一个覆盖窗口,该窗口覆盖除系统ui(导航栏和状态栏)之外的整个屏幕,并且不覆盖软键盘。

上面的参数可以做到这一点,但是问题是在打开软键盘时导航栏按钮不可见。

当前结果:

类型为“ TYPE_ACCESSIBILITY_OVERLAY”的叠加层会隐藏导航按钮

预期结果:

类型为“ TYPE_ACCESSIBILITY_OVERLAY”的叠加层会隐藏导航按钮

我已经尝试了一些标志,例如:

WindowManager.LayoutParams.flaG_LAYOUT_ATTACHED_IN_DECOR

以及以下各项的组合:

WindowManager.LayoutParams.flaG_LAYOUT_INSET_DECOR
WindowManager.LayoutParams.flaG_LAYOUT_IN_SCREEN

但是他们都不起作用。 我也经历了documentation for system ui,但是其中涉及WindowManager.LayoutParams标志的大多数选项是用于隐藏装饰,其余的都需要引用窗口,我认为我无法从中得到辅助功能服务。

问题似乎是:

WindowManager.LayoutParams.flaG_ALT_FOCUSABLE_IM

标志,如果我将其删除,导航按钮是可见的,但是覆盖层将覆盖键盘,即使我使用如下命令也可以做到这一点:

params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;

我的问题:

有什么办法可以使覆盖层不覆盖键盘并且不隐藏导航栏按钮?

whmyth 回答:类型为“ TYPE_ACCESSIBILITY_OVERLAY”的叠加层会隐藏导航按钮

您是否尝试从 PixelFormat.TRANSLUCENT 切换到 PixelFormat.TRANSPARENT?还有:

.apply {
        gravity = Gravity.BOTTOM //CENTER or whatever
        x = 0
        y = 0
        screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    }
本文链接:https://www.f2er.com/3117099.html

大家都在问