Android 刘海屏适配指南
如果您不希望您的内容与刘海区域重叠, 以确保您的内容不会与状态栏及 导航栏。如果您要呈现在刘海区域中,请使用 WindowInsetsCompat.getDisplayCutout()
检索 DisplayCutout
对象 包含每个刘海屏的安全边衬区和边界框。借助这些 API 您需要检查视频内容是否与刘海屏重叠 并根据需要调整位置。
您还可以确定内容是否布置在刘海区域之后。通过 layoutInDisplayCutoutMode
窗口布局属性用于控制您的内容在刘海区域中的绘制方式。 您可以将 layoutInDisplayCutoutMode
设置为以下值之一:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
: 当刘海屏包含在 系统栏。否则,窗口不会与刘海屏重叠;用于 例如,在横屏模式下显示内容时,内容可能会进入信箱模式。如果 您的应用以 SDK 35 为目标平台,则对于非浮动广告,系统会解读为ALWAYS
窗口。LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
: 始终允许将内容延伸至刘海屏区域。如果您的应用面向 SDK 35 且在 Android 15 设备上运行,则这是唯一允许的模式 非浮动窗口,以确保无边框显示。LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
: 在竖屏和横屏模式下,内容都会呈现到刘海区域中。错误做法 用于浮动窗口如果您的应用以 SDK 35 为目标平台,则会被解读为ALWAYS
,适用于非浮动窗口。LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
: 但内容绝不会呈现到刘海区域中。如果您的应用以 SDK 35 为目标平台,则此参数为 对于非浮动窗口,解释为ALWAYS
。
您可以通过编程方式或通过设置刘海屏模式来设置刘海模式 style。
以下 示例定义了一个样式,以应用 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
属性。
<style name="ActivityTheme"><item name="android:windowLayoutInDisplayCutoutMode">shortEdges <!-- default, shortEdges, or never --></item>
</style>
如果选择在代码中进行指定,只需要在Activity中加入如下代码即可:
if (Build.VERSION.SDK_INT >= 28) {WindowManager.LayoutParams params = getWindow().getAttributes();params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;getWindow().setAttributes(params);
}