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

使用findNavController.navigate跳转时状态栏变colorPrimary原因

调用findNavController().navigate()跳转时状态栏变色的核心原因

两种跳转方式的底层实现逻辑差异,直接导致了状态栏表现不一致:

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

内容的提问来源于stack exchange,提问作者AMJAD AFRIDI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:42:51