You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何在Fragment与Activity中隐藏NavController和AppBarConfiguration

问题:使用NavController和AppBarConfiguration时如何实现全屏显示?

我在Android Java应用中使用导航图,并在主Activity中配置了NavController和AppBarConfiguration,具体代码如下:

public class Activity extends BaseActivity {
    NavController navController;
    private AppBarConfiguration appBarConfiguration;
    private ActivityBinding activityBinding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        activityBinding = ActivityBinding.inflate(getLayoutInflater());
        View view = activityBinding.getRoot();
        setContentView(view);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        navController = Navigation.findNavController(Activity.this, R.id.fragment);

        appBarConfiguration =
                new AppBarConfiguration.Builder(navController.getGraph()).build();

        setupActionBar(navController, appBarConfiguration);

        activityBinding.bottomBar.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.mainFragment:
                        navController.navigate(R.id.mainFragment);
                        return true;
                    case R.id.secondFragment:
                        navController.navigate(R.id.secondFragment);
                        return true;
                    case R.id.thirdFragment:
                        navController.navigate(R.id.thirdFragment);
                        return true;
                }
                return false;
            }
        });
    }

    private void setupActionBar(NavController navController,
                                AppBarConfiguration appBarConfig) {
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfig);
    }


    @Override
    public boolean onSupportNavigateUp() {
        return NavigationUI.navigateUp(Navigation.findNavController(this, R.id.fragment), appBarConfiguration);
    }
}

我希望在某个Fragment和Activity中隐藏底部导航栏与AppBar以实现全屏显示,为此尝试了以下几种方案,但均无效果:

方案一:隐藏ActionBar

@Override
public void onResume() {
    super.onResume();
    ActionBar supportActionBar = ((AppCompatActivity) requireActivity()).getSupportActionBar();
    if (supportActionBar != null)
        supportActionBar.hide();
}

@Override
public void onStop() {
    super.onStop();
    ActionBar supportActionBar = ((AppCompatActivity) requireActivity()).getSupportActionBar();
    if (supportActionBar != null)
        supportActionBar.show();
}

方案二:设置全屏Flag

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

方案三:设置系统UI可见性

getActivity().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 // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

请问在使用NavController和AppBarConfiguration时,如何正确实现全屏显示?


解决方案

通过以下步骤可成功隐藏底部导航栏,实现全屏效果:

  1. 在主Activity中添加控制底部导航栏可见性的方法:
public void setBottombarVisibility(int visibility){
    activityBinding.bottomBar.setVisibility(visibility);
}
  1. 创建BaseFragment,让需要隐藏导航栏的Fragment继承该类:
public class BaseFragment extends Fragment {

    protected int isBottomBarVisible = View.GONE;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Activity act = getActivity();
        if (act instanceof Activity) ((Activity) act).setBottombarVisibility(isBottomBarVisible);
        return super.onCreateView(inflater, container, savedInstanceState);

    }
}

当继承BaseFragment的Fragment创建时,底部导航栏会自动隐藏。


内容的提问来源于stack exchange,提问作者Iam Me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:07:35