跳至主要內容

將 SystemUiMode 的預設值設定為邊緣對邊緣模式

摘要

#

如果您的 Flutter 應用程式的目標 Android SDK 版本為 15 或更新版本,您的應用程式將會自動以邊緣對邊緣模式顯示,如SystemUiMode API 頁面所示。若要維持非邊緣對邊緣的應用程式行為(包括未設定的 SystemUiMode),請使用遷移指南中的資訊。

背景

#

依預設,Android 會針對所有目標 Android 15 和更新版本的應用程式強制執行邊緣對邊緣模式。如需詳細資訊,請查看Android 版本資訊。這會影響在 Android SDK 15+ 或 API 35+ 上執行的裝置。

在 2024 年第 4 季發布之前,Flutter 應用程式預設目標為 Android 14,且不會自動選擇邊緣對邊緣模式,但是當您選擇目標為 Android 15 時,您的應用程式將會受到影響。如果您的應用程式的目標是 flutter.targetSdkVersion(預設情況下會這樣做),那麼它將從 Flutter 3.26 版開始目標為 Android 15,自動讓您的應用程式選擇邊緣對邊緣模式。請瀏覽時程表以了解詳細資訊。如果您的應用程式透過呼叫 SystemChrome.setEnabledSystemUIMode 明確將 SystemUiMode.edgeToEdge 設定為以邊緣對邊緣模式執行,則您的應用程式已完成遷移。需要更多時間遷移至邊緣對邊緣模式的應用程式必須使用下列步驟,才能在執行 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 應用程式設定較低的目標 SDK 版本,則必須執行這些遷移步驟,才能維持未設定或非邊緣對邊緣的 SystemUiMode

參考

#