隐藏导航栏和状态栏而不闪烁

时间:2015-07-30 10:54:03

标签: android hide navigationbar

我正在使用Android应用。我有一个main_activity,它显示了一个UI屏幕。 我使用以下代码隐藏了此活动的导航栏和状态栏: -

decorView = getWindow().getDecorView();
        final int flags = 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
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        // This work only for android 4.4+
        getWindow().getDecorView().setSystemUiVisibility(flags);

        // Code below is to handle presses of Volume up or Volume down.
        // Without this, after pressing volume buttons, the navigation bar will
        // show up and won't hide
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                {
                    decorView.setSystemUiVisibility(flags);
                }
            }
        });

很好用。当我启动我的应用程序时,我的main_activity被调用,它会全屏启动应用程序。但是当它启动时,STATUS_BAR和NAVIGATION_BAR会暂时显示,然后它们会被隐藏。 这对于main_activity来说没问题。

但现在我的主要活动启动了另一项活动。 基本上我点击我的应用程序中的设置按钮,它启动一个新的活动。 这项新活动也需要全屏显示。所以我使用上面提到的代码片段使其全屏显示。 它全屏显示。但是NAVIGATION_BAR和STATUS_BAR再次暂时显示出来。从用户的角度来看,这不是好事。因为我的main_activity已经隐藏了BARS,所以新活动甚至不应该暂时显示它们。

我不知道如何实现这一目标。非常感谢您的帮助。 提前致谢。

以下是我发布new_activity的方法: -

private void shownewscreen() //new screen is basically setting screen
    {
        Intent intent = new Intent();
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.setClass(this, newscreen.class);
        startActivity(intent);
    }

我在新活动的onCreate方法中使用以下代码来隐藏两个条: -

protected void makeWindowWithoutStatusNaviBar(){

decorView = getWindow().getDecorView();
final int flags = 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
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        | View.STATUS_BAR_HIDDEN;
// This work only for android 4.4+
// Code below is to handle presses of Volume up or Volume down.
// Without this, after pressing volume buttons, the navigation bar will
// show up and won't hide
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
        {
            decorView.setSystemUiVisibility(flags);
        }
    }
});

在Windows上,焦点更改我也在新活动中使用以下代码: -

     onWindowFocusChanged(hasFocus) {
       super.onWindowFocusChanged(hasFocus);
        getWindow().getDecorView().setSystemUiVisibility(
                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
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.STATUS_BAR_HIDDEN);
}

0 个答案:

没有答案