1. 适配背景
vivo分屏在原生分屏的基础上做了定制化处理,比如增加分屏方式(消息\三指\组合)、分屏小桌面列表、输入法边界定制、加密界面定制等
2. 适配指导
2.1 判断分屏的方式
Activity判断:
isInMultiWindowMode方法,判断mIsInMultiWindowMode变量,该变量在oncreate和模式变化时赋值
onMultiWindowModeChanged方法,在模式发生变化时回调
Services判断:
Q以及之前可以通过
1. WindowManagerGlobal.getWindowManagerService().getDockedStackSide() != WindowManager.DOCKED_INVALID
2. getStackInfo,判断WINDOWING_MODE_SPLIT_SCREEN_PRIMARY(分屏)的stack是否存在,存在处于分屏
R以及以后通过
1. isSplitScreenModeActivated方法判断
2. Settings.system. in_multi_window, 0非分屏,1进入分屏
2.2 配置支持分屏
应用AndroidManifest.xml中可以针对app或activity进行设置。
<application
android:resizeableActivity="true">
<activity
android:resizeableActivity="true" />
</application>
当应用targetSdkVersion >=24时,android系统默认设置android:resizeableActivity=”true”,不需要应用声明即可支持应用分屏。当应用targetSdkVersion < 24时,需要应用针对application或activity设置android:resizeableActivity=”true”。
应用设置application android:resizeableActivity=”true”时,会针对app的所有activity生效,因此如果应用只需要声明单独的activity时,可以只针对单个activity进行设置,系统侧建议针对application设置android:resizeableActivity=”true”,避免应用部分页面在分屏下的异常。
2.3 获取Activity实际显示的窗口大小和位置
使用:context.getResources().getDisplayMetrics()
不推荐使用:context.getWindowManager().getDefaultDisplay().getMetrics(outMetrics)
上述接口中,context为Activity对应的上下文句柄,每个Activity应该严格使用自己的context来进行布局,而不是使用application的context。
2.4 获取Activity的窗口布局方向
获取Activity窗口方向的的方法为:
context.getResources().getConfiguration().orientation
注:不要使用width /height的方法来判Activity为横竖屏布局,因为在多窗口状态下,支持应用的拖动,会改变宽高
获取设备的方向context.getWindowManager().getDefaultDisplay().getRotation()
2.5 Activity大小切换时不重启适配
应用在Activity窗口大小切换时不重启适配,在android:configChanges属性增加screenSize|screenLayout| orientation|smallestScreenSize,并在Activity的onConfigurationChanged回调中更新宽高刷新子布局。
应用复写onConfigurationChanged()方法,通把网址生成app过该方法的Configuration参数获得窗口高度等信息,并对界面布局做相应调整,如切换布局、调整控件位置和间距等。
2.6 状态栏位置
当处于分屏下屏,和小窗模式时,应用没有状态栏,自动生成app的软件此时不应该留出状态栏高度,需要从顶部开始布局。
可以通过configuration中windowingmode判断当前处于的模式,WINDOWING_MODE_FREEFORM和WINDOWING_MODE_SPLIT_SCREEN_SECONDARY不需要空出状态栏
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/11589/
部分内容来自网络投稿,如有侵权联系立删