關於螢幕凹口

螢幕凹口是某些裝置上延伸至螢幕表面的區域。這項設計可提供無邊框體驗,同時在裝置正面為重要感應器提供空間。

直向模式下的挖孔範例
圖 1. 肖像模式中的去背範例
橫向模式下的挖孔範例
圖 2. 橫向模式下的挖孔範例

Android 支援在搭載 Android 9 (API 級別 28) 以上版本的裝置上顯示凹口。不過,裝置製造商也可以在搭載 Android 8.1 以下版本的裝置上支援螢幕凹口。

本頁面說明如何在 Compose 中實作挖孔裝置支援,包括如何使用挖孔區域,也就是顯示介面上包含挖孔的無邊框矩形。

預設案例

如果應用程式指定目標 API 級別 34 以下版本,或 Activity 未呼叫 enableEdgeToEdge,則預設不會在凹口區域繪製,除非應用程式在包含螢幕凹口的系統資訊列中繪製。

在搭載 Android 15 以上版本的裝置上,如果應用程式指定 API 級別 35 以上,或呼叫 enableEdgeToEdge 的活動,則會在挖孔區域繪製。

也就是說,在搭載 Android 15 以上版本的裝置上,如果應用程式指定 API 級別 35 以上,則非浮動視窗的 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT、LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 和 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 會解讀為 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS。

手動處理挖孔資訊

您必須處理挖孔資訊,避免挖孔區域遮蓋重要文字、控制項或需要精細觸控辨識的互動元素 (挖孔區域的觸控靈敏度可能較低)。處理凹口時,請勿對狀態列高度進行硬式編碼,否則可能會導致內容重疊或遭到截斷。請改用下列任一方式處理挖孔:

如果是 Compose,建議您使用 displayCutout、safeContent 或 safeDrawing,處理可組合項中的挖孔插邊。這種做法可讓您視需要遵循螢幕凹口邊框間距,或在不需要時忽略。

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}