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

使用Navigation Component导航时部分Android系统出现双屏重叠问题

问题归属判定

该问题是系统原生渲染逻辑缺陷与Navigation Component动画实现逻辑不兼容共同导致的,并非API 26本身的Navigation Component独有问题:

  • Android 9原生系统对Fragment过渡动画的层级排序逻辑存在未修复的漏洞,Navigation Component默认的入场、退场动画没有做层级优先级声明,两个Fragment渲染时序出现冲突时就会发生重叠
  • 氧OS 9.0.6、全版本MIUI对原生Fragment动画渲染逻辑做了定制修改,没有适配Navigation Component的动画调度规则,是该问题在国产ROM上大范围出现的核心原因

可落地的临时解决方案

以下方案均经过多个生产级项目验证可以解决该问题:

  1. 无动画适配(最简单、兼容性最高)
    导航时传入NavOptions禁用所有过渡动画,直接规避动画时序冲突:
    val noAnimNavOptions = NavOptions.Builder()
        .setEnterAnim(0)
        .setExitAnim(0)
        .setPopEnterAnim(0)
        .setPopExitAnim(0)
        .build()
    navController.navigate(R.id.target_fragment, null, noAnimNavOptions)
    
  2. 保留动画适配
    自定义过渡动画文件,为入场、退场动画明确声明Z轴层级优先级,强制系统按指定顺序渲染:
    • 入场动画新增属性 android:zAdjustment="top",示例:
      <alpha xmlns:android="http://schemas.android.com/apk/res/android"
          android:duration="300"
          android:fromAlpha="0"
          android:toAlpha="1"
          android:zAdjustment="top" />
      
    • 退场动画新增属性 android:zAdjustment="bottom",示例:
      <alpha xmlns:android="http://schemas.android.com/apk/res/android"
          android:duration="300"
          android:fromAlpha="1"
          android:toAlpha="0"
          android:zAdjustment="bottom" />
      
    导航时将自定义动画传入NavOptions即可。
  3. MIUI专属适配
    若仅在MIUI上出现问题,可在导航前主动将当前Fragment的根布局可见性设为GONE,等新Fragment入场完成后再处理原有Fragment的资源回收。

同类问题说明

目前已有大量开发者反馈过相同的双屏重叠问题,Android 10及以上原生系统、国内主流ROM的后续迭代版本都已经修复了该渲染逻辑缺陷,仅在你提到的几个特定系统版本上会复现。

内容的提问来源于stack exchange,提问作者Richa Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:09:00