折叠屏适配总结

本文介绍了在平行视界环境中开发应用的关键技术,包括如何判断是否处于平行视界状态,获取Activity相关信息,窗口的独立显示和全屏设置,以及如何处理Activity生命周期、布局自适应和音视频播放的兼容性问题,最后提到了SDK适配的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平行页面状态接口:

  1. 判断当前是否运行在平行视界状态

String config = context.getResources().getConfiguration().toString();

boolean isInMagicWindow = config.contains("hw-magic-windows");

context为Activity的context

  1. 获取Activity实际显示的窗口大小

推荐使用:

context.getResources().getDisplayMetrics()

context为Activity对应的上下文句柄,每个Activity应该严格使用自己的context来进行布局,而不是使用application的context。

  1. 获取Activity的窗口布局方向

context.getResources().getConfiguration().orientation

注:不推荐使用width > height的方法来判Activity为横屏布局。

窗口显示

  1. 以Activity组件为单位的窗口分离显示

平行视界中窗口在左右两边拆分显示以Activity组件为基本单位,应用窗口需以Activity来实现和启动,才能做到左右窗口独立分离显示。例如,ActivityA在左半边显示,如果想让其点开的新窗口在右半边显示,那么新窗口必须以Activity方式实现,如果只是打开一个Activity窗口上的子布局或者非Activity实现的子窗口(ViewGroup/Fragment/PopUpWindow/Dialog等),新窗口是无法拆分在右半边显示的。

  1. 指定Activity全屏显示

平行视界状态下,Activity希望以全屏来显示,有三种方法:

  1. 方法一:动态全屏显示,Activity首先以平行视界非全屏显示,调用Activity类的如下接口申请横屏方向可进入全屏显示状态:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

在此状态下,调用Activity类申请竖屏方向即可退出全屏状态:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

  1. 方法二:提供需全屏显示的Activity和包名

例如:“com.cmcc.example.AActivity

  1. 方法三:在“AndroidManifest.xml”文件中将Activity的方向配置为横屏,此方法中,Activity会一直以全屏状态显示

android:screenOrientation = “landscape”

android:screenOrientation = sensorLandscape

Activity布局

  1. Activity大小切换时不重启适配

强烈建议应用在Activity窗口大小切换时不重启适配,在android:configChanges属性增加screenSize|screenLayout|orientation|smallestScreenSize,并在Activity的onConfigurationChanged回调中更新宽高刷新子布局。

  1. 避免Activity子布局的缺省重用

平行视界下,左右Activity同时显示,左右显示的两个Activity中不能同时存在单实例的公共布局模块。

  1. 布局自适应

应用复写onConfigurationChanged()方法,通过该方法的Configuration参数获得窗口高度等信息,并对界面布局做相应调整,如切换布局、调整控件位置和间距等。

@Override

public void onConfigurationChanged(Configuration newConfig) {

// 以dp为单位的窗口大小

super.onConfigurationChanged(newConfig);

Log.i("test", "newConfig.screenHeightDp:" + newConfig.screenHeightDp

+ ", newConfig.screenWidthDp" + newConfig.screenWidthDp);

}

平行视界模式下,应用通过如下接口获取到的是应用窗口实际宽高大小:

context.getResources().getDisplayMetrics()

context.getWindowManager().getDefaultDisplay().getMetrics(outMetrics)

// context为Activity对应的context对象。

Activity生命周期

  1. 左右Top Activity同时以muti-resume运行

平行视界双窗口状态下,右边Top Activity始终为resumed状态,左边Top Activity为resumed或者paused状态,系统默认应用支持multi-resume,如果应用希望不支持multi-resume,可以在应用AndroidManifest.xml中增加meta-data字段来关闭:

meta-data android:name="android.allow_multiple_resumed_activities" android:value="false"

注意:multi-resume关闭后,应用在其它多窗口状态下也不会再支持multi-resume子特性,同时可能存在Activity失去焦点后音视频播放停止的问题,所以建议应用在关闭multi-resume后,在Activity的onStop而不是onPause中停止音视频的播放。

音视频播放

  1. 支持左右两边Activity同时播放,用户具有绝对的控制权

左右两个Activity可以同时播放,用户主动点击播放/暂停按钮可以控制任意一个窗口的音视频播放状态。

  1. 避免左右两个Activity共用一个播放器

左右两个Activity同时显示,建议两边使用的播放器资源相互独立,互不影响。

SDK适配备注:

提供activity的全路径信息标注全屏or分屏
注意onConfigChange后的ui变化并适配
大屏模式下功能的完整性,dialog适配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值