微调器打开时如何隐藏导航栏

Anc*_*hal 5 android

我能够在我的应用程序中设置沉浸式模式navigationstatus bars在几乎所有情况下都可以正确隐藏。我迄今发现的唯一的排斥是,当我点击一个Spinner有分量 android:spinnerMode="dropdown"navigation bar还是来了。从下拉列表中选择一个项目后它就会消失,但我希望它根本不显示。有没有办法做到这一点?

Mic*_*ton 3

我能够解决这个问题,尽管这并不能很好地满足我的需求,但它仍然可以防止窗口焦点更改,这就是导致系统 UI 显示的原因。抱歉,这是 Kotlin 语言

在您的活动中onCreate()

try {
    val popup = Spinner::class.java.getDeclaredField("mPopup")
    popup.isAccessible = true

    // Get private mPopup member variable and try cast to ListPopupWindow
    val popupWindow = popup.get(yourSpinnerView) as android.widget.ListPopupWindow

    popupWindow.isModal = false
} catch (e: Throwable) {
    // silently fail...
}
Run Code Online (Sandbox Code Playgroud)

重要的部分是这一行:

popupWindow.isModal = false
Run Code Online (Sandbox Code Playgroud)

这不会影响微调器交互,至少对我来说,它仍然可以正确注册点击,并在弹出窗口外部发生点击时隐藏。但是,它不会捕获所有点击,因此触摸其他屏幕元素将触发它们onClickListener并隐藏微调器。因此,我决定不使用此方法,而只处理出现的导航栏,因为我无法通过使用此方法获得我想要的东西。

希望这对其他人有帮助,因为我花了一周的大部分时间才弄清楚这一点。我希望 Android 不会考虑打开旋转器来改变窗口可见性,删除所有窗口标志并终止沉浸式模式。

编辑:删除了自定义类,选择最简单的解决方案,非常容易实现。