我的应用忘记了窗口可见性标志

时间:2019-01-18 15:22:58

标签: android android-webview

我有两个应用程序,都在主要活动的onCreate中使用相同的代码来隐藏屏幕顶部的栏,依此类推:

if (Build.VERSION.SDK_INT >= 23) {
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

一个应用程序是一个简单的测试应用程序,其中仅显示几个按钮,此代码非常有用。因此,我将代码添加到了API级别较低的现有第二个应用程序中,并创建了一个WebView。但是,令我惊讶的是,我发现虽然该代码最初有效,但是只要我在应用程序外执行任何操作(例如切换到另一个应用程序并返回),或者-更重要的是-只需关闭屏幕然后再将其返回即可上-应用程序突然“忘记”这些标志,导致系统栏出现在屏幕顶部,窗口显示不正确,因为WebView似乎试图在状态栏下绘制我的页面顶部。

我发现我可以通过在onWindowFocusChanged中调用上述代码来解决此问题-但这通常会导致屏幕上出现“闪烁”,此时屏幕暂时显示错误,工具栏位于顶部,布局不正确,然后将还原标志并重新绘制所有内容。这不是一个可以接受的长期解决方案,因为此应用程序旨在在黑暗环境中使用(因此隐藏了所有内容,以便可以绘制非常黑暗的UI),并且短暂的明亮闪光会造成破坏。 >

此解决方法似乎还有一个次要问题-即,由于似乎触发了焦点更改并加速了隐藏这些相同的按钮,因此使导航按钮位于屏幕底部更加困难。 / p>

因为这在我的测试程序中没有问题或不需要解决方法,所以我知道可以保留这些标志,但是我不确定使它在成熟的应用程序中失败的区别是什么。我考虑的是,最低和/或目标API级别可能不同,或者可能需要额外设置才能与WebView一起使用(但是呢?),或者可能是某些事实。完全不同。我错过了什么导致我的应用程序窗口忘记其标志?

0 个答案:

没有答案