提问者:小点点

在Android中无延迟地隐藏导航栏


我有一个简单的应用程序,它在后台加载一个ImageView

<ImageView
    android:id="@+id/splashimage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"
    android:src="@drawable/logo"
    android:visibility="gone"/>

我正在尝试加载全屏模式下的图像,意味着没有导航栏和没有应用程序栏。 通过设置以下标志,我能够从运行应用程序的第一个时刻就删除teappbar:

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

然而,当我尝试对应用程序底部的导航栏做同样的操作时,在移除之前会有一些延迟。 因此,这种行为有点怪异。 它首先显示导航条,然后隐藏并显示白色背景,只有在一秒钟后图像才填补空白。 我附上一张照片,试图尽可能清晰地再现当时的情况。

我的问题是,我怎样才能显示图像覆盖从一开始的空间,而不是遵循下面提到的3个步骤的行为?

要隐藏导航栏,请使用以下代码;

        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN |
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);


共1个答案

匿名用户

在遵循Bruno的注释之后,我更新了代码并解决了错误:

 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

请注意,我并不想完全删除appbar。 因此,我没有在末尾包含以下行view.system_ui_flag_fullscreen);