概述

#

如果您的 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 的设备上选择退出。

请注意以下事项

  1. Android 计划使此处详述的变通方法暂时有效。
  2. Flutter 计划在一年内与 Android(和 iOS)保持一致,默认支持全屏显示,因此请**在操作系统移除选择退出的功能之前迁移到全屏模式**。

迁移指南

#

要在 SDK 15 上退出全屏显示,请在每个需要它的 Activity 中指定新的样式属性。如果您有一个父样式,子样式需要从中退出,则可以仅修改父样式。在以下示例中,更新从 flutter create 生成的样式配置。

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

AndroidManifest.xml
xml
<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

将以下属性添加到适当的样式中

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

确保在夜间模式样式文件中也进行相同的更改:your_app/android/app/src/main/res/values-night/styles.xml

确保在两个文件中一致地更新这两个样式。

此修改后的样式将使以 Android SDK 15 为目标的应用退出全屏显示。现在您已完成!

时间线

#

从 Flutter 3.27 开始,Flutter 应用默认以 Android 15 为目标,因此如果您希望使用此版本而不手动为 Flutter 应用设置较低的目标 SDK 版本,请按照前面的 迁移步骤 来维持未设置或非全屏的 SystemUiMode

已包含在版本:3.26.0-0.0.pre
稳定版本:3.27

参考资料

#