我能够在我的应用中设置沉浸式模式,几乎在每种情况下都能正确隐藏navigation
和status bars
。到目前为止,我发现的唯一排除是,当我点击具有的Spinner
组件时
android:spinnerMode="dropdown"
,navigation bar
仍然出现。它从下拉列表中选择一个项目后消失,但我希望它根本不显示。有没有办法可以做到这一点?
答案 0 :(得分:1)
我能够解决这个问题,虽然这不能很好地满足我的需求,它仍然可以防止窗口焦点更改,这是导致系统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...
}
重要的是这一行:
popupWindow.isModal = false
这不会影响微调器的交互,至少对我来说,它仍然可以正确地记录点击,并在弹出窗口外点击时隐藏。但是,它不捕获所有点击,因此触摸其他屏幕元素将触发其onClickListener
以及隐藏微调器。因此,我决定不使用这种方法,只是处理导航条,因为我无法通过使用它获得我想要的东西。
希望这有助于其他人,因为我花了一个星期的时间来解决这个问题。我希望Android不考虑打开微调器作为窗口可见性更改,删除所有窗口标志并杀死沉浸式模式。
编辑:删除了自定义类,选择了最容易实现的最简单的解决方案。
答案 1 :(得分:0)
<item name="android:windowFullscreen">true</item>