跳至主要内容

将 SystemUiMode 的默认值设置为 Edge-to-Edge

摘要

#

如果您的 Flutter 应用的目标 Android SDK 版本为 15 或更高版本,则您的应用将自动以边缘到边缘模式显示,如 SystemUiMode API 页面所示。要保持非边缘到边缘的应用行为(包括未设置的 SystemUiMode),请使用 迁移指南 中的信息。

上下文

#

默认情况下,Android 会对所有目标 Android 15 及更高版本的应用强制执行 边缘到边缘模式。有关更多详细信息,请查看 Android 发行说明。这会影响在 Android SDK 15+ 或 API 35+ 上运行的设备。

在 2024 年第四季度发布之前,Flutter 应用默认情况下以 Android 14 为目标,并且不会自动选择加入边缘到边缘模式,但当您选择以 Android 15 为目标时,您的应用 *将* 受到影响。如果您的应用以 flutter.targetSdkVersion 为目标(默认情况下就是这样),那么从 Flutter 版本 3.26 开始,它将以 Android 15 为目标,自动将您的应用选择加入边缘到边缘模式。请访问 时间线 以获取详细信息。如果您的应用显式设置 SystemUiMode.edgeToEdge 以通过调用 SystemChrome.setEnabledSystemUIMode 以边缘到边缘模式运行,则您的应用已完成迁移。需要更多时间迁移到边缘到边缘模式的应用必须使用以下步骤在运行 Android SDK 15+ 的设备上选择退出。

请注意以下事项

  1. Android 计划将此处详细介绍的解决方法作为临时措施。
  2. Flutter 计划在一年内与 Android(和 iOS)保持一致,默认支持边缘到边缘,因此请在操作系统移除选择退出功能之前 **迁移到边缘到边缘模式**。

迁移指南

#

要在 SDK 15 上选择退出边缘到边缘,请在每个需要它的活动中指定新的样式属性。如果您有一个父样式,子样式需要选择退出,则您只需修改父样式即可。在以下示例中,更新从 flutter create 生成的样式。

默认情况下,Flutter 应用中使用的样式在清单文件(your_app/android/app/src/main/AndroidManifest.xml)中设置。通常,样式由 @style 表示,并有助于为您的应用设置主题。在您的清单中修改这些默认样式

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application ...>
        <activity ...>
            <!-- Style you will need to modify: -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
            />
        </activity>
    </application>
</manifest>

找到此样式在 your_app/android/app/src/main/res/values/styles.xml 中的定义位置。在那里,将以下属性添加到样式中

xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        ...
	    <!-- Add the following line: -->
        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
    </style>
</resources>

此修改后的样式使您的应用选择退出针对 Android SDK 15+ 的应用的边缘到边缘。所以现在您完成了!

时间线

#

Flutter 应用将在下一个稳定版本 (3.26) 中以 Android 15 为目标,因此,如果您希望使用此版本并且不手动为您的 Flutter 应用设置较低的 target SDK 版本,则需要执行这些 迁移步骤 以维护未设置或非边缘到边缘的 SystemUiMode

参考

#