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

Flutter横屏模式下如何实现内容延伸绘制到Android刘海区域

Flutter Android 横屏刘海区域适配解决方案

核心问题原因

Android 原生系统对横屏下刘海区域的显示策略默认和竖屏不一致,仅配置 Flutter 端的 UI 延伸参数无法覆盖系统层面的刘海布局限制。

分步解决配置

1. 新增 Android 原生层面刘海适配配置

在 android/app/src/main/res/values/styles.xml 的 App 主题样式中添加刘海适配属性:

<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>

如果需要适配 Android P 及以上版本,额外在 values-v28/styles.xml 中添加相同配置。该属性指定内容可以延伸到屏幕短边的刘海区域,横屏时刘海刚好位于短边位置,从系统层面放开刘海区域的占用限制。

2. 调整 Flutter 端系统 UI 配置

保留已配置的竖屏适配代码,补充横竖屏切换时的统一沉浸模式设置逻辑:

import 'package:flutter/services.dart';

// 在页面初始化、或屏幕方向变化回调中执行以下代码
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(
  const SystemUiOverlayStyle(
    statusBarColor: Colors.transparent,
    systemNavigationBarColor: Colors.transparent,
  ),
);

3. 调整 Scaffold 相关参数

确保 Scaffold 的两个延伸参数都处于开启状态:

Scaffold(
  extendBody: true,
  extendBodyBehindAppBar: true,
  // 若不需要使用默认AppBar可省略该参数
  appBar: AppBar(
    backgroundColor: Colors.transparent,
    elevation: 0,
  ),
  body: YourContentWidget(),
)

4. 内容避让适配

内容区域使用 SafeArea 按需避让系统操作区域,避免关键内容被刘海、状态栏或导航栏遮挡:

body: SafeArea(
  // 可根据业务需求自定义各方向是否需要避让
  left: true,
  top: true,
  right: true,
  bottom: true,
  child: YourContentWidget(),
),

验证注意事项

  • 先卸载设备上已安装的旧版应用,避免缓存配置未生效
  • 重新编译运行应用,横竖屏切换时确认刘海区域都可正常显示内容
  • 若仍有黑边,检查是否有第三方全屏插件修改了系统UI配置,优先使用原生配置实现沉浸效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:05