努比亚X是双面屏了,VIVO下个月也要发布一款双面屏手机,两个屏幕宽度应该是一致的,高度有所不同,背屏的高度会比主屏小一些,因此需要进行必要的尺寸适配。
如果什么都不做,那么Activity会自动销毁重建,也谈不上适配了,
所以我们需要配置Activity
的configChanges
属性,并且重写onConfigurationChanged
方法,让其处理screenSize
改变,完成相应的适配。
总体上有两点需要适配:
资源文件(图片、尺寸)
依赖屏幕宽高的控件需要在切屏的时候更新依赖数据
以上内容详细可以参考双屏第三方应用自由切换适配指导意见
适配完毕之后,我们可以通过来如下命令,模拟主屏和副屏切换动作。
adb shell wm size 1080x2340
adb shell wm size 1080x1920
可能遇到的问题
上面的命令需要root权限。
如果没有root的手机,那么可以用模拟器。
如果APP只支持armeabi,那么市面上的模拟器都安装不了。
切屏的时候发现Activity销毁重建了。
针对上面第3点,有以下两种解决方案:
将gradle下面的
abiFilters "armeabi"
删除,测试完毕之后再补上。
第一种解决方案我试了之后发现有些第三方SDK在loadLibrary的时候报找不到so的异常。
第二种解决方案我试了一下,没发现闪退问题,可以完成测试。
因此推荐顺序为:root手机 > 方案二 > 方案一
至于第4点,有以下解决方案:
我是在尝试适配努比亚X的时候出现的问题,努比亚的主屏是1080x2280
、副屏是720x1520
,系统认为这两种屏幕之间的切换是属于屏幕的物理大小改变了,因此我们还需要增加一个flag:smallestScreenSize
。如果以后有新出的双面屏像素密度都发生变化了,那么我们就再加一个density
。