Android下为特定Fragment设置透明状态栏的异常问题咨询
单Fragment透明状态栏解决方案
问题核心原因:Activity的Window是全局共享的,你在HomeFragment中修改了Window的状态栏配置后,没有在Fragment离开视野时恢复默认配置,导致所有依附于该Activity的Fragment都继承了透明状态栏的效果。
步骤1:新增状态栏恢复方法
在HomeFragment中添加恢复状态栏默认样式的方法:
private void resetStatusBar() { Window window = getActivity().getWindow(); // 清除全屏布局标记 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); // 恢复状态栏为项目默认颜色,替换为你自己项目的状态栏色值即可 window.setStatusBarColor(ContextCompat.getColor(requireContext(), R.color.your_default_status_bar_color)); }
步骤2:绑定状态栏配置切换时机
根据你项目的Fragment切换方式选择对应实现逻辑:
- 场景1:使用ViewPager/ViewPager2切换Fragment
在HomeFragment的onResume()生命周期中调用transparentStatusBar(),在onPause()生命周期中调用resetStatusBar()。 - 场景2:使用FragmentManager的hide/show方法切换Fragment
重写HomeFragment的onHiddenChanged方法:@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (hidden) { resetStatusBar(); } else { transparentStatusBar(); } }
补充说明
如果其余三个Fragment有自定义状态栏颜色的需求,可以在各自的onResume()方法中调用setStatusBarColor方法设置对应色值即可。
内容的提问来源于stack exchange,提问作者Mustak khadem
相关产品推荐
相关产品推荐

