三星远程开发测试平台

反馈 注册 登录

三星折叠屏适配常见问题

1. 使用场景一:APP连续性

   可折叠设备展开时,当前应用页面须无缝延续到另一个屏幕,并可自动调整大小匹配新的布局,反之亦然。也就是说,应用程序需要准备好在多个屏幕(不同分辨率、密度等)之间切换。


image.png


适配原则

双屏在切换过程中,APP不发生Crash/FC(Forced quit)/ANR, 尽量不重启,页面能够适应新的屏幕,不发生内容缺失或布局不对称,切换过程自然流畅不卡顿。

问题分类

1-1 Folding layout:折叠/展开操作的布局问题

1-2 Folding-内容/状态丢失:折叠/展开操作时出现的内容/状态丢失问题

1-3 Folding-Crash/FC/ANR:折叠/展开操作时出现的Crash/FC/ANR问题

1-1        Folding layout问题及修改建议

1)   问题描述:从折叠到打开屏幕,APP页面未布满屏幕,从展开到折叠屏幕,页面显示不全。

修改建议:正确处理运行时配置变更。

l  如果采用系统默认方式处理,即屏幕发生切换时,重启正在运行的Activity(先后调用onDestroy() 和onCreate())。建议在onCreate() 方法中重绘页面,例如可以在屏幕大于sw580时使用平板模式重绘 (仅为举例,需根据各自业务实际情况调整)。

l  如果采用不重启Activity自行处理的方式,可在Activity或者fragment的onConfigurationChanged()方法中,重新获取屏幕的宽高绘制视图。

*注意,使用这种不重启Activity的方式,您需要在应用清单manifest中增加android:configChanges属性,并至少包含以下配置值:


image.png


2)   问题描述:进行折叠/展开操作,自定义View的位置偏移。

修改建议:屏幕切换后,屏幕宽高发生了变化,如果是自定义的View,需要在自定义的代码中刷新布局,重写onMeasure() 或 onDraw() 方法。

1-2        Folding – 内容/状态丢失 问题及修改建议

问题描述:例如屏幕发生切换后,摄像头从前置变成了后置;或者输入的内容丢失等问题。

修改建议:

l  如果采用系统默认方式处理,销毁Activity之前,需调用onSaveInstanceState()来保存应用状态的数据,并在重新创建时恢复状态。

l  如果采用不重启Activity,自行处理的方式,可保持原有状态。

在应用清单manifest中增加 android:configChanges 属性及进行配置,在onConfigurationChanged()方法中处理配置变更。


image.png

1-3 Folding – Crash/FC/ANR

修改建议:如果采用系统默认方式处理,

l  重新加载资源时不要出现异常调用。

l  重新加载Activity时,不要在OnDestroy()中调用finish()或自行终止进程,否则将导致APP在设备折叠或展开时关闭。

o 参考资料

-     https://developer.samsung.com/galaxy/foldable/techdocs#app-continuity

 

2. 使用场景二:Multi-Window

支持三个窗口的多任务处理功能,十分贴合展开后大屏的使用场景,可带来高效并发的体验

适配原则

建议APP支持多窗口,并能正常布局,窗口Switch或Resize也能正确布局并且不发生Crash/FC(Forced quit)/ANR, 改变焦点,Switch或Resize操作都不会停止播放视频。

问题分类

2-1 不支持多窗口

2-2 Multi Window layout

2-3 Multi Window-内容/状态丢失

2-4 Multi Window-Crash/FC/ANR

2-5 Stop Playback

2-1        不支持多窗口

建议尽量支持多窗口,声明方法:

声明resizeableActivity属性,目的是通知系统该APP是否为Multi-window做了适配。


image.png


u 如果设置为true,允许进入多窗口模式。

u 如果设置为false,不允许进入多窗口模式,只允许全屏显示。

u 如果未设置,属性值默认为true。如果低于Android N,请参看下文说明。


image.png


2-2        Multi Window layout

问题描述:Multi Window状态下以及进行窗口Switch, resize操作时出现的布局问题。

修改建议:正确处理运行时配置变更

l  如果采用系统默认方式处理,即屏幕发生切换时,重启正在运行的Activity(先后调用onDestroy()和onCreate())。建议在onCreate()方法中重绘页面,例如可以在屏幕大于sw580时使用平板模式重绘(仅为举例,需根据各自业务实际情况调整)。

l  如果采用不重启Activity,自行处理的方式,可在Activity或者fragment的onConfigurationChanged()方法中,重新获取屏幕的宽高绘制视图。

l  如果是自定义的View,需要在自定义的代码中刷新布局,重写onMeasure() 或 onDraw() 方法。

2-3        Multi Window-内容/状态丢失

问题描述:Multi Window状态下以及进行窗口Switch, resize操作时出现的内容/状态丢失问题。

修改建议:

l  如果采用系统默认方式处理,销毁Activity之前,需调用onSaveInstanceState()来保存应用状态的数据,并在重新创建时恢复状态。

l  如果采用不重启Activity,自行处理的方式,可保持原有状态。

在应用清单manifest中增加 android:configChanges 属性及进行配置,在onConfigurationChanged()方法中处理配置变更。


image.png

2-4        Multi Window-Crash/FC/ANR

修改建议:如果采用系统默认方式处理,

l  重新加载资源时不要出现异常调用。

l  重新加载Activity时,不要在OnDestroy()中调用finish()或自行终止进程,否则将导致APP在设备折叠或展开时关闭。

2-5        Stop Playback

问题描述:在切换到Multi Window状态下焦点发生变化/Switch/Resize时视频停止播放。

修改建议:

l  播放视频的Activity不要在其onPause()中暂停视频,建议在onStop()中处理暂停,在onStart()中播放。

l  从Android P开始,应用可以增加支持Multi-resume属性,支持以后,在多窗口中的应用都会处于Resume状态,而非pause状态。


image.png


o 参考资料

-       https://developer.android.com/training/multiscreen/screensizes

-       https://developer.android.com/training/multiscreen/screendensities

-       https://developer.android.com/guide/topics/ui/multi-window

-     https://developer.android.com/guide/topics/resources/runtime-changes

-       https://developer.samsung.com/galaxy/foldable/techdocs#multi-resume

3. 使用场景三:双屏独立使用

适配原则

建议APP支持最大纵横比,内外屏都能完整显示,内屏显示时,需要正确适配L-Cut(L型缺口的摄像头区域)

问题分类

3-1 Max aspect ratio

3-2 Min aspect ratio

3-3 DisplayCutout

 

3-1 Max aspect ratio

问题描述:APP在外屏上不能满屏显示,底部有黑条。

适配建议:APP支持最大纵横比,有三种方式,随着手机屏幕尺寸的不断变化,应用最好不进行最大纵横比设置,尽量采用由系统自动调节的方式,如果必须设置,请选择市场上最大纵横比进行设置。下面是支持最大纵横比的三种方式:

 

image.png

 

3-2 Min aspect ratio

问题描述:APP在内屏上不能满屏显示,左右有黑色边框。

适配建议: 这是因为如果APP targetSdkVersion<29时,Android默认支持的最小纵横比为4:3,即1.33,所以在纵横比小于1.33时将进入兼容模式,左右黑色边框填充。如果应用同时不支持多窗口,就需要设置最小纵横比。

APP支持最小纵横比,有三种方式:

 

image.png

 

3-2 DisplayCutout页面内容被L型缺口遮挡问题

修改建议:

l  UI页面需按照DisplayCutout标准接口进行优化。

l  应避免页面布局对Status Bar使用了硬编码。

l  基于Window而非Screen获得坐标。

l Activity非全屏显示时,无内容区域背景建议设置为非透明。

 

o 参考资料

-       https://developer.android.google.cn/guide/practices/screens-distribution#MaxAspectRatio

-       https://developer.android.google.cn/reference/android/R.attr#minAspectRatio

-       https://developer.android.google.cn/reference/android/view/DisplayCutout

-       https://developer.samsung.com/galaxy/foldable/techdocs#other

-       http://support-cn.samsung.com/App/DeveloperChina/Notice/Detail?NoticeId=86

 

收集反馈

如果您:

适配过程中遇到了技术问题,

对可折叠设备有自己的畅想、建议、意见…

 

欢迎发邮件到:rdtpservice@samsung.com

邮件主题:三星Foldables+APP名

 

感谢您的关注和参与!

 

您还可登录三星中国开发者网站:三星中国开发者网站 | 中国三星电子

或关注“三星开发者”公众号查看相关开发者指引。

 

image.png