旋转器打开时如何隐藏导航栏

时间:2015-12-09 09:17:12

标签: android

我能够在我的应用中设置沉浸式模式,几乎在每种情况下都能正确隐藏navigationstatus bars。到目前为止,我发现的唯一排除是,当我点击具有的Spinner组件时  android:spinnerMode="dropdown"navigation bar仍然出现。它从下拉列表中选择一个项目后消失,但我希望它根本不显示。有没有办法可以做到这一点?

2 个答案:

答案 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>