折叠屏手机的出现,满足了用户对大屏幕的追求,但卓越的用户体验更离不开应用的适配与功能创新。距离Mate X面世已经一年的时间,应用适配情况如何?在适配过程中有哪些经验可以参考?有没有常见问题可以规避?
7月30日,由软件绿色联盟联合华为举办的零基础高效适配折叠屏在线沙龙中,来自华为的折叠屏项目经理闫鸿飞在《折叠屏连续性和拖拽适配介绍》议题中就上述问题进行了讲解,并结合典型案例分享了折叠屏连续性和拖拽的开发与调试,帮助开发者高效适配折叠屏。
根据国内TOP1000主流应用折叠屏测试报告数据显示,当前折叠屏应用适配率为90%,整体表现优异,为后续应用功能创新打下了坚实的基础。
折叠屏连续性适配基础要求
折叠屏连续性要求应用在屏幕折叠态、展开态以及切换过程中,保证业务的连续性和UI显示正常。当前连续性适配主要有如下两种方式,开发者可根据实际业务需要灵活选择。
1)页面不重启,动态调整布局:
这种方式适用于需要调整的显示内容较少的场景,通过在onConfigurationChanged方法中通过代码动态调整UI来适配;重新初始化View,将View和数据重新绑定。
2)页面重启,重启前保存页面和用户数据的方式:
该方式适用于UI复杂,需要动态调整的地方多的场景,建议针对大屏单独写一套layout资源放在(layout-sw600dp)目录下面。在销毁activity之前,通过onSaveInstancesState()存储状态,在onCreate()或者是onRestoreInstanceState()进行状态的恢复。
连续性适配DEMO
1.1 连续性适配典型案例
问题1:折叠展开重启、闪退
用户在折叠态和展开态切换时,遇到较多的问题之一是应用重启,这大多是由于应用重启之前没有在Activity的onSaveInstanceState()方法中保存状态数据而导致的。这种情况建议开发者重写onConfigurationChanged() 方法,动态调整页面布局,自适应屏幕变化。
如果应用在生命周期任意函数中调用finish()或其他终止进程方法,就会导致出现闪退的问题,这时就需要进行状态的保存和恢复,主要有下面两种形式:
- 通过onSaveInstancesState()和 onRestoreInstanceState()进行状态的保存和恢复。
- 避免在调用finish()或其他自行终止进程,否则会导致应用程序在设备折叠或展开时出现关闭、闪退等问题。
问题2:折叠展开页面跳转
在应用适配过程中,遇到过折叠、展开时页面消失,显示了应用主页面或其他页面的情况。经过分析发现这是由于应用在重启过程中触发了页面保护机制造成的。如果开发者遇到类似情况,需要识别折叠展开的重启流程和应用异常。
问题3:折叠展开或者分屏后显示异常
当应用设置了页面不重启,但是在onConfigurationChanged方法中没有动态调整布局时,会导致折叠展开或者分屏后显示异常,这时应用的窗口宽度发生变化。这主要是由于应用的一些控件的宽度是和应用窗口宽度动态计算出来的,可以通过onConfigurationChanged将这部分逻辑代码重新执行一遍来解决问题。
由于屏幕尺寸千差万别,显示适配工作比较困难,因此华为推出了栅格化设计系统。栅格化系统是一套能够适配不同屏幕尺寸和屏幕朝向的响应式布局的基础设计机制,它可以确保跨设备的一致性。栅格化系统具备多种优势,满足应用在多尺寸设备、多场景布局的需求。
• 给布局提供一种可循的规律,解决多尺寸多设备的动态布局问题;
• 给系统提供一种统一的定位标注,保证各模块各设备的布局一致性;
• 给应用提供一种灵活的间距调整方法,满足特殊场景布局调整的可能性。
折叠屏拖拽适配基础要求
通过上面拖拽演示视频可以看到,使用拖拽功能可以为分屏场景跨应用操作带来极大的便利,可以将一系列跨应用的查找、选择简化为拖拽动作。随着屏幕越来越大,分屏、悬浮窗的使用场景也随之增多,拖拽的价值更加显著。
2.1 拖拽功能技术框架
拖拽属于Android框架的一部分,可以让用户使用图形化拖放手势,将数据从一个视图移至另一个视图。通常以长按作为拖拽的开始动作,从系统流程来看,可以分为开始、继续、放下、结束四个阶段,该框架包括拖动事件类、拖动监听器以及辅助工具方法和类。
2.2 拖拽适配常见问题
1)支持的数据类型
拖拽支持文本,图片,文件, RUL各种类型数据,请参照ClipData和ClipDescription。
2)在哪里实现拖入拖出功能
拖拽是实现将数据从一个视图移至另一个视图。根据业务需要和用户体验选择合适的视图实现。
3)文件拖拽兼容性
推荐使用fileprovider进行数据传递
https://developer.android.com/training/secure-file-sharing?hl=zh_cn
4)没有权限
DRAG_FLAG_GLOBAL ,
DRAG_FLAG_GLOBAL_URI_READ 和 DRAG_FLAG_GLOBAL_URI_WRITE
折叠屏开发与调试
没有折叠屏真机,适配工作要如何开展?华为技术专家建议大家可以采用远程真机、安卓模拟器以及屏幕规格模拟这三种方式进行调测。
1)远程真机
远程真机是华为部署在云测平台的真机,可以远程接入想调测的机型,直观了解应用在真机上的运行表现。
2)安卓模拟器
从Android Studio 3.5Canary版本开始,开发者可创建一个运行Q Beta 2版本的折叠屏虚拟设备,其支持的硬件配置分别为7.3英寸(折叠后为4.6英寸),以及8英寸(折叠后为6.6英寸)。建议开发者选择8英寸的设备来模拟适配华为的MateX折叠屏手机。
下载地址:https://developer.android.google.cn/studio/preview
3)屏幕
在非折叠屏手机上可以通过命令修改手机的屏幕分辨率来进行模拟调试,详细方法可见下图:
· END ·