将`SystemUiMode`的默认值设置为边缘到边缘
摘要
#如果您的 Flutter 应用的目标 Android SDK 版本为 15 或更高版本,则您的应用会自动以边缘到边缘模式显示,如SystemUiMode
API 页面中所述。要保持非边缘到边缘的应用行为(包括未设置的SystemUiMode
),请按照迁移指南中的步骤操作。
背景
#默认情况下,Android 会为所有目标 Android 15 或更高版本的应用强制执行边缘到边缘模式。要了解有关此更改的更多信息,请查看Android 发行说明。这会影响运行 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 ...>
<!-- 要修改的样式: -->
<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">
...
<!-- 添加以下行: -->
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
</resources>
此修改后的样式会使您的应用选择退出针对 Android SDK 15+ 的应用的边缘到边缘模式。这样就完成了!
时间线
#从 Flutter 3.27 开始,Flutter 应用默认情况下以 Android 15 为目标,因此如果您希望使用此版本并且不为 Flutter 应用手动设置较低的 target SDK 版本,请按照前面的迁移步骤来保持未设置或非边缘到边缘的SystemUiMode
。
已在版本中落地:3.26.0-0.0.pre
稳定版本:3.27
参考
#除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。