原理说明
这里涉及到的知识点是android:resizeableActivity属性。
在 Android 7.0(API 级别 24)或更高版本的应用,android:resizeableActivity属性默认为true(对应适配方式1)。这个属性是控制多窗口显示的,决定当前的应用或者Activity是否支持多窗口。
在清单的<activity>
或 <application>
节点中设置该属性,启用或禁用多窗口显示:
android:resizeableActivity=[“true” | “false”]
如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 如果此属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。
适配方式2即为设置屏幕的最大长宽比,这是官方提供的设置方式。
如果设置了最大长宽比,必须android:resizeableActivity="false"
。 否则最大长宽比没有任何作用。
适配刘海屏
Android9.0及以上适配
Android P(9.0)开始,官方提供了适配异形屏的方式。
通过全新的 DisplayCutout 类,可以确定非功能区域的位置和形状,这些区域不应显示内容。 要确定这些凹口屏幕区域是否存在及其位置,请使用 getDisplayCutout() 函数。
- 全新的窗口布局属性 layoutInDisplayCutoutMode 让您的应用可以为设备凹口屏幕周围的内容进行布局。 您可以将此属性设为下列值之一:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
默认值是LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
,刘海区域不会显示内容,需要将值设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
-
您可以按如下方法在任何运行 Android P 的设备或模拟器上模拟屏幕缺口:
-
启用开发者选项。
-
在 Developer options 屏幕中,向下滚动至 Drawing 部分并选择 Simulate a display with a cutout。
-
选择凹口屏幕的大小。
-
适配参考:
// 延伸显示区域到刘海
WindowManager.LayoutParams lp = window.getAttributes();