無邊框顯示可讓應用程式在系統資訊列 (狀態列、說明文字列和導覽列) 後方繪製 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) }
}
...
}