隐藏导航栏没有延迟在Android

e4eetjau  于 2023-04-28  发布在  Android
关注(0)|答案(2)|浏览(146)

我有一个简单的应用程序,它在后台加载一个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"/>

我试图在全屏模式下加载图像,这意味着没有导航栏和应用程序栏。我已经能够通过设置以下标志从运行应用程序的第一时间删除te appbar

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

然而,当我尝试对应用程序底部的导航栏做同样的操作时,在删除之前会有一些延迟。因此,行为有点奇怪。发生的情况是,首先显示navigation bar,然后隐藏并显示白色的background,而且只过了一秒钟,图像就填补差距。我附上一张照片,试图尽可能清晰地再现当时的情况。
我的问题是,我如何从一开始就显示覆盖该空间的图像,而不是遵循下面提到的3步行为?
要隐藏导航栏,请使用此代码;

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

mmvthczy

mmvthczy1#

在遵循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
            // Hide the nav bar and status bar
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

请注意,我并不想完全删除appbar,因此我没有在最后包含以下行| View.SYSTEM_UI_FLAG_FULLSCREEN);

更新

请注意,如果您希望布局显示在appbar下面,而不是appbar下面,则需要删除此行

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
4c8rllxm

4c8rllxm2#

对于我导航到的片段,这对我很有效,我把这段代码放在MainActivity中

navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(binding.navView, navController);

        navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
            @Override
            public void onDestinationChanged(@NonNull NavController navController,
                                             @NonNull NavDestination navDestination,
                                             @Nullable Bundle bundle) {
                BottomNavigationView navBar = findViewById(R.id.nav_view);
                if(navDestination.getId() == R.id.navigation_librarySlideShowFragment ||
                        navDestination.getId() == R.id.navigation_settings ||
                        navDestination.getId() == R.id.wifiSettingsFragment ||
                        navDestination.getId() == R.id.playbackFragment) {
                    navBar.setVisibility(View.GONE);
                } else {
                    navBar.setVisibility(View.VISIBLE);
                }
            }

相关问题