显示刘海屏是某些设备上延伸到显示表面的区域。它实现了全屏体验,同时为设备正面的重要传感器提供了空间。


Android 支持运行 Android 9 (API 级别 28) 及更高版本的设备上的显示刘海屏。但是,设备制造商也可以支持运行 Android 8.1 或更低版本的设备上的显示刘海屏。
本页面介绍如何在 Compose 中实现对带刘海屏设备的支持,包括如何使用刘海屏区域——即显示表面上包含刘海屏的全屏矩形。
默认情况
默认情况下,除非应用绘制到包含显示刘海屏的系统栏中,否则目标 API 级别为 34 或更低的应用,或未调用 enableEdgeToEdge
的 Activity,不会绘制到刘海屏区域。
目标 API 级别为 35 或更高版本(运行 Android 15 或更高版本)的设备上的应用,或调用 enableEdgeToEdge
的 Activity,会绘制到刘海屏区域。
换句话说,对于目标 API 级别为 35 或更高版本(运行 Android 15 或更高版本)的应用中的非浮动窗口,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
。
手动处理刘海屏信息
您必须处理刘海屏信息,以防止刘海屏区域遮挡重要的文本、控件或需要精细触摸识别的互动元素(刘海屏区域的触摸灵敏度可能较低)。处理刘海屏时,不要硬编码状态栏高度,因为这可能导致内容重叠或被截断。相反,请通过以下任何一种方式处理刘海屏:
使用
WindowInsets.displayCutout
、WindowInsets.safeContent
或WindowInsets.safeDrawing
通过
LocalView.current.rootWindowInsets.displayCutout
访问刘海屏Path
对象
对于 Compose,我们建议您使用 displayCutout
、safeContent
或 safeDrawing
在您的可组合项中处理刘海屏内边距。这种方法允许您在需要时尊重显示刘海屏填充,或在不需要时忽略它。
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
为您推荐
- 注意:禁用 JavaScript 时会显示链接文本
- Compose 中的窗口内边距
- 图形修饰符
- 样式化段落