使用findNavController.navigate跳转时状态栏变colorPrimary原因
两种跳转方式的底层实现逻辑差异,直接导致了状态栏表现不一致:
findNavController().navigate(R.id.action)的默认行为
Navigation组件执行导航跳转时,默认会触发目标Fragment的主题属性校验与重载:- 如果你的导航图(nav_graph.xml)中给
billingFragment配置了独立的app:theme属性,Fragment附着到Activity时会自动加载对应主题配置,未手动指定状态栏颜色的情况下,会直接取主题内的colorPrimary值(也就是你看到的蓝色)重绘状态栏。 - 如果项目接入了Android Material Components库的边缘到边缘(EdgeToEdge)适配逻辑,新Fragment加载时如果根布局开启了
android:fitsSystemWindows="true"且没有单独覆盖状态栏颜色配置,组件会自动重置系统栏颜色为主题默认值,覆盖你之前手动设置的白色状态栏。 - 若你是在
mainFragment的生命周期方法里手动设置的白色状态栏,NavController跳转替换Fragment时,不会保留前一个Fragment生命周期内设置的窗口属性,会回退到Activity的默认主题配置渲染状态栏。
- 如果你的导航图(nav_graph.xml)中给
setCurrentTab切换Tab的行为逻辑
你调用的FragmentUtils.getParent(this, MainTabUIDelegate::class.java)?.setCurrentTab(BottomNavBar.TAB_Premium,"")属于底部导航栏内部的Fragment切换,一般是通过show()/hide()或者同Activity内不重建视图的Fragment事务实现,整个切换过程不会触发主题重载、也不会触发Material组件的系统栏自动重置逻辑,所以你之前给窗口设置的白色状态栏会被完整保留。
内容的提问来源于stack exchange,提问作者AMJAD AFRIDI
相关产品推荐
相关产品推荐

