設定無邊框螢幕

無邊框顯示可讓應用程式在系統資訊列 (狀態列、說明文字列和導覽列) 後方繪製 UI,提供更身歷其境的使用者體驗。如果指定搭載 Android 15 (API 級別 35) 以上版本的裝置,系統預設會強制執行無邊框模式

如要在所有 Android 版本上正確顯示無邊框內容,請按照這些設定步驟操作。如果沒有這些步驟,應用程式可能會在系統資訊列後方繪製實心顏色,或無法與螢幕小鍵盤 (IME) 轉場效果同步顯示內容動畫。

1. 啟用無邊框顯示

如要在舊版 Android 上啟用無邊框效果,請在 Activity.onCreate() 方法中呼叫 enableEdgeToEdge()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    ...
}

根據預設,enableEdgeToEdge() 會將系統資訊列設為透明,但如果是 3 鍵操作模式,則會將半透明的遮罩套用至導覽列,以提升對比度。系統圖示和半透明遮罩的顏色會配合系統的淺色或深色主題調整。

2. 設定 windowSoftInputMode

在活動的 AndroidManifest.xml 項目中設定 android:windowSoftInputMode="adjustResize"。應用程式可透過這項設定接收 IME 插邊,以便在螢幕小鍵盤顯示或隱藏時,使用邊框間距調整版面配置。

<!-- In your AndroidManifest.xml file: -->
<activity
  android:name=".ui.MainActivity"
  android:label="@string/app_name"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/Theme.MyApplication"
  android:exported="true">
  ...
</activity>

3. 使用插邊處理重疊

啟用無邊框後,應用程式的部分內容和 UI 元素可能會繪製在系統資訊列後方。為避免系統資訊列遮蔽重要或互動式元素,或與系統手勢重疊,您需要處理插邊。

插邊說明與系統 UI 或系統手勢相交的畫面部分。全螢幕顯示功能主要有以下幾種插邊類型:

  • 系統資訊列插邊:代表顯示系統資訊列的區域。使用這些插邊,避免 UI 遭到系統資訊列遮蔽。
  • 螢幕凹口插邊:代表裝置螢幕上存在實體凹口 (例如相機凹口) 的區域。

在 Compose 中,您可以使用尺規、邊框間距修飾符或插邊大小修飾符處理插邊。如需詳細指引,請參閱「關於視窗插邊」。

進階主題

如要瞭解更進階的無邊框應用實例,請參閱下列內容。

沉浸模式

有些內容 (例如影片或地圖) 適合採用完全沉浸式體驗,隱藏系統資訊列。您可以使用 WindowInsetsControllerCompat 隱藏系統資訊列:

val windowInsetsController =
    WindowCompat.getInsetsController(window, window.decorView)

// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())

// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) For example, use either `Scaffold`,

系統列顏色和圖示

採用無邊框設計時,系統資訊列後方可能會顯示應用程式的背景,因此您可能需要調整系統資訊列圖示顏色,以提高對比度。

如要將狀態列圖示變更為淺色或深色,請使用 WindowInsetsControllerCompat

// Set status bar icons to dark
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = true

// Set status bar icons to light
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

系統資訊列保護機制

雖然 enableEdgeToEdge() 提供預設的透明或半透明系統資訊列,但您可能需要自訂這項設定。請參閱 Android 系統資訊列設計指南無邊框設計指南,決定何時使用透明或半透明資訊列。

如要讓三按鈕導覽列完全透明而非半透明,可以停用對比度強制執行功能:

window.isNavigationBarContrastEnforced = false

詳情請參閱「關於系統資訊列保護機制」。

對話方塊

如要顯示無邊框全螢幕對話方塊,請在對話方塊的 onStart() 方法中呼叫 WindowCompat.enableEdgeToEdge

class MyAlertDialogFragment : DialogFragment() {
    override fun onStart(){
        super.onStart()
        dialog?.window?.let { WindowCompat.enableEdgeToEdge(it) }
    }
    ...
}