Android中如何在Fragment与Activity中隐藏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时,如何正确实现全屏显示?
解决方案
通过以下步骤可成功隐藏底部导航栏,实现全屏效果:
- 在主Activity中添加控制底部导航栏可见性的方法:
public void setBottombarVisibility(int visibility){ activityBinding.bottomBar.setVisibility(visibility); }
- 创建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
相关产品推荐
相关产品推荐

