
折叠屏设备从展开到折叠的切换过程中,同一个设备可能出现多种屏幕尺寸的使用状态。这让开发者在应用程序适配中面临着不小的挑战,比如说屏幕难以完美适配,导致的UI错位以及反应迟缓等体验性问题,本文将从app设计和开发过程中给出支持不同屏幕尺寸和像素密度建议指导,确保应用界面能够在各类屏幕上美观的呈现。
一
应用resizeable能力支持

Fig在展开时可以全屏显示 (图以MateX示例)

Fig折叠后可以全屏显示 (图以MateX示例)
如上图,在应用界面能够不同的屏幕尺寸下铺满全屏显示,且响应布局和操作按键功能正常。我们强烈建议您的应用进行resizeable能力的支持。
您需要根据应用面向的API Level(targetSdkVersion)进行支持resizeable能力的声明。

Note:虽然安卓提供了申请受限屏幕能力,但强烈建议您为应用设计resizeable能力,因为一旦您声明了受限屏幕比例(最大或最小)这意味着,当您的app运行在一个屏幕比例超出了您声明的范围,您的应用程序在屏幕上将出现黑边等现象。
二
声明受限屏幕(可选)
我们强烈建议您的应用进行resizeable能力支持。但如果您不想您的app 或 activity支持多窗口,可以通过设置 android:resizeableActivity false,这种情况下,应用将不具备分屏、悬浮窗口等多窗口能力,在不同屏幕下的显示由系统进行控制,依赖于面向的API Level;
1)如果应用程序面向APILevel 26以上(targetSdkVersion>=26),应用依然可以全屏显示,但是不具备多窗口能力。
2)如果应用程序面向APILevel 26以下(targetSdkVersion<26),系统将限制应用显示的比例在 16:9 (大约 1.86). 如果应用运行在一个更大宽高比的设备上将出现黑边。
为了防止情况2)的出现,您可以通过安卓受限屏幕的能力来配置您的应用可以支持的屏幕比例范围,结合未来设备可能的形态,我们建议您对屏幕尺寸支持的最小范围为 1:1 到 2.4 之间,这也是安卓目前对应用开发者的建议。
1.声明最大比例
1)如果应用程序面向APILevel 26以上(targetSdkVersion>=26),在您的 <activity> 标记中使用 android:MaxAspectRatio声明最大比例。以下示例演示了如何声明 2.4 (12:5)的最大长宽比:

2)如果应用程序面向APILevel 26以下(targetSdkVersion<26), 通过在 <meta-data>添加android.max_aspect 声明的方式, 参考示例如下:

2.声明最小比例
1)如果应用程序面向APILevel 29以上(targetSdkVersion>=29),在 manifest 文件的 <activity> 节点中增加 android:MinAspectRatio 属性,声明最小支持比例:

2) 如果应用程序面向API Level 29以下(targetSdkVersion<29),在 manifest 文件的 <application> 节点中增加 <meta-data> 数据,设置最小支持比例(声明为1.0即表示在展开态大屏下满屏显示):

您也可以参阅Android开发者指南中关于声明受限屏幕的使用说明:
https://developer.android.google.cn/guide/practices/screens-distribution.html
三
应用布局优化
在对不同尺寸屏幕适配过程中,为了确保在折叠屏各个屏幕形态下获取最佳的布局显示效果,例如显示更多更清晰的内容,建议您对布局进行优化。
应用界面正确、美观的布局和显示,包含如下:
1)确保您的布局能够根据屏幕适当地调整大小
2)根据屏幕配置提供合适的UI 布局
3)确保对正确的屏幕应用正确的布局
4)提供可正常缩放的位图
详细信息请参阅Android开发者指南
https://developer.android.google.cn/training/multiscreen/screensizes?
开发者为每种屏幕配置优化用户体验,方法是为不同的屏幕尺寸添加专门的布局,并为常见的屏幕密度添加优化的位图图像。以上内容为折叠屏开发指导之屏幕兼容性内容,后续软件绿色联盟会继续发布应用连续性、应用内分屏等折叠屏开发指导系列文章,敬请持续关注!
end