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

横屏非全屏模式下如何在屏幕挖孔区域下方渲染Activity元素

实现方案

可以实现,不需要进入全屏模式。
你已经配置的windowLayoutInDisplayCutoutMode为shortEdges是正确的基础配置,非全屏模式下界面元素没法渲染到挖孔区域下方的核心原因是:系统默认会通过窗口安全区 inset 自动给布局内容加内边距,强制把内容推到挖孔、系统状态栏的安全区域内,只要关闭这个自动适配逻辑、自行接管安全边距处理即可。

具体操作步骤

  • 第一步:关闭系统自动适配安全区
    找到你的Activity对应的根布局,添加属性android:fitsSystemWindows="false",这个配置会关掉系统自动给根布局加安全边距的逻辑,此时你的布局已经可以完全绘制到挖孔区域下方,包括你说的标题面板等元素。
  • 第二步:手动处理需要避开挖孔的控件边距
    关闭自动适配后,系统不会再帮你把内容挪出挖孔区域,你需要手动获取挖孔区的尺寸,给不能被挖孔遮挡的控件加上对应方向的边距即可,其余装饰性内容、背景可以直接铺在挖孔区域下方。
    以Kotlin代码为例,监听窗口inset拿到挖孔参数即可完成适配:
    val rootContainer = window.decorView
    rootContainer.setOnApplyWindowInsetsListener { _, insets ->
        // 获取屏幕挖孔信息
        val displayCutout = insets.displayCutout
        // 横屏左侧挖孔对应的安全边距宽度
        val cutoutLeftPadding = displayCutout?.safeInsetLeft ?: 0
        // 给标题面板加左侧内边距,避开挖孔位置
        titlePanel.setPadding(cutoutLeftPadding, 0, 0, 0)
        insets
    }
    

注意事项

  • 该适配逻辑从API 28(Android 9)开始生效,不需要额外添加全屏相关的Window flags,保留状态栏/导航栏的非全屏状态下也能正常运行。
  • 如果你使用Jetpack WindowManager库做跨版本适配,核心逻辑一致:关闭系统默认的内容安全边距适配,自行根据获取到的挖孔/折叠屏安全区参数,给需要避让的控件设置边距即可。
  • 你当前已经实现的背景延伸效果参考:
    横屏挖孔区背景延伸效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:12:19