将 `SystemUiMode` 默认为边缘到边缘模式
概述
#如果您的 Flutter 应用面向 Android SDK 版本 15,您的应用将自动以边缘到边缘模式显示,如 SystemUiMode
API 页面中所述。为保持非边缘到边缘的应用行为(包括未设置 SystemUiMode
的情况),请遵循迁移指南中的步骤。
背景
#默认情况下,Android 对所有面向 Android 15 或更高版本的应用强制执行边缘到边缘模式。欲了解此更改的更多信息,请查阅 Android 15 发布说明。这会影响运行 Android SDK 15+ 或 API 35+ 的设备。
在 Flutter 3.27 之前,Flutter 应用默认面向 Android 14,并且不会自动选择进入边缘到边缘模式,但当您选择面向 Android 15 时,您的应用*将*受到影响。如果您的应用面向 `flutter.targetSdkVersion`(默认情况即如此),那么从 Flutter 3.27 版本开始,它将面向 Android 15,自动让您的应用选择进入边缘到边缘模式。
如果您的应用通过调用 SystemChrome.setEnabledSystemUIMode
明确将 `SystemUiMode.edgeToEdge` 设置为在边缘到边缘模式下运行,则您的应用已完成迁移。需要更多时间迁移到边缘到边缘模式的应用,必须使用以下步骤在运行 Android SDK 15 的设备上选择退出。
请注意以下事项
- Android 计划此处详述的解决方案是暂时的。
- Flutter 计划在年内与 Android(和 iOS)保持一致,默认支持边缘到边缘模式,因此**请务必在操作系统移除选择退出功能之前迁移到边缘到边缘模式**。
迁移指南
#要在 SDK 15 上选择退出边缘到边缘模式,请在每个需要它的活动中指定新的样式属性。如果您有一个父样式,而子样式需要选择退出,则可以只修改父样式。在以下示例中,请更新由 `flutter create` 生成的样式配置。
默认情况下,Flutter 应用中使用的样式是在 Android 清单文件(your_app/android/app/src/main/AndroidManifest.xml
)中设置的。通常,样式由 @style
表示,并帮助为您的应用设置主题。请在您的清单文件中修改这些默认样式:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application ...>
<activity ...>
<!-- Style 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 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.27 开始,Flutter 应用默认面向 Android 15,因此如果您希望使用此版本而不为您的 Flutter 应用手动设置较低的目标 SDK 版本,请遵循前面的迁移步骤,以保持未设置或非边缘到边缘的 SystemUiMode
。
包含在版本中:3.26.0-0.0.pre
稳定版本:3.27