Android 折叠屏技术发展与适配

文章目录

1 折叠屏行业概览

1.1 折叠屏诞生的背景

手机屏幕目前的整体发展趋势是大屏化,大屏化主要表现在两方面:屏幕面积的增大,屏占比的提高。但是目前这两方面已经发展的相当成熟,很难再有大的突破。

1.1.1 屏幕面积变化

手机由功能手机向智能手机演变最重要的标志是屏幕的变化。2010年智能手机的平均屏幕尺寸仅有3.1英寸,发展至2014年智能手机的屏幕平均尺寸增加至4.8英寸,2018年更是增加至5.9英寸,目前主流的大屏尺寸已达到6.5寸左右,智能手机逐渐朝着大屏化方向发展。

单从屏幕面积来看,6.5英寸左右已是单手操控携带便捷性的极限。

在这里插入图片描述

1.1.2 屏占比变化

手机厂商通过陆续推出刘海屏水滴屏挖孔屏全面屏升降式摄像头屏下指纹识别等功能,将屏幕可用面积利用到了极致,极大的提升了屏占比。现阶段大多数手机的屏占比处于**90%**左右,很难再有大的提升空间。

折叠屏手机的出现不仅实现了屏幕尺寸增加,同时还满足携带方便的需求,有效解决大屏和便携矛盾,未来或将成为手机发展的重要方向之一。

1.2 折叠屏手机结构

1.2.1 折叠屏手机物理结构

折叠屏的主要结构由柔性AMOLED屏铰链组成。

通常,我们见到的折叠屏手机都是由1整块AMOLED屏组成,并且铰链位置可以显示画面。

除此之外,目前市面还有一种双屏手机(屏幕由2块组成,铰链区域不可显示画面),也被称为折叠屏手机,即微软2020年9月推出的基于Android 10.0系统的Surface Duo。

1.2.2 折叠屏手机分类

目前折叠屏的折叠方式主要由以下4种,主流的实现方式是:横向内折横向外折

  1. 横向内折:折弯半径小,需使用寿命更高的柔性屏幕,因此实现难度大、技术成本更高。但优点是折叠状态下,屏幕被折合在内侧,可较好保护屏幕。代表产品有:三星Galaxy Fold 和 W20 5G、华为Mate X2、小米MIX Fold;
  2. 横向外折:显示更便捷,但折叠时屏幕在外侧,易损坏。横向外折折叠屏手机价格通常比横向内折价格低,代表产品有:华为 Mate X 和 Mate Xs;
  3. 竖向内折:展开时手机大小与传统智能手机相差不大,折叠后体 积变小,方便携带。代表产品有三星 Galaxy Z Flip、摩托罗拉Moto Raz;
  4. 折三折:需用到两个铰链,成本较高,尚处于概念机阶段。

数据来源:头豹研究院:2020年中国折叠屏手机行业概览

1.3 折叠屏手机市场规模

2020国内智能手机销量约3亿部,而同期全球的折叠屏手机出货量仅194.73 万部,三星以**71.59%的市场份额占据全球折叠屏市场第一,华为市场份额10.56%**位居第二。

从销量来说,折叠屏市场占有依然比较小众,主要原因在于折叠屏手机目前良品率还不够高,产能受限,进而导致手机售价过高;同时,软件方面,大部分软件还未进行完全适配,影响用户体验。

1.3.1 限制折叠屏发展因素

  1. 技术成熟度低

    1. 硬件:屏幕的可靠性、电池续航、铰链设计、屏幕厚度 …
    2. 软件:应用适配程度较低
  2. 良品率低

    柔性AMOLED比LCD良率低。华为Mate X 的AMOLED屏供应商为京东方,京东方折叠屏目前的良品率数据仅为:2018,65%;2021,85%

  3. 价格制约销量

    当前市场高端机定位6k;折叠屏初期产品普遍售价1w以上,目前部分产品最低售价刚降到万元内。

1.3.2 为什么要支持大屏设备

2021 Google I/O 上发布的折叠屏适配新方案,代表Android对折叠屏设备适配的重视,在大屏化的趋势下,折叠屏未来可期。

只要应用适配了折叠屏设备,同时就自动适配了Android 平板等大屏设备。

根据Google发布的数据,通过适配 Android 大屏设备,开发者们可以覆盖超过 2.5 亿台活跃的可折叠设备、平板电脑和 Chromebook。2020 年,平板电脑设备的销售量增长了 16%。分析师预计,到 2023 年市面上将有超过 4 亿台 Android 平板电脑,到2023年可折叠设备销量将达到3000万台,增长空间巨大。另外,可折叠设备也正在重新定义高端设备。Android 应用也可以在 Chrome OS 上运行,而 Chrome OS 现在是世界第二大桌面操作系统。

2 折叠屏适配方案发展

折叠屏手机适配主要经历了三个重要阶段。

  1. 折叠屏手机首次发布,Android官方折叠屏适配指南

    2018年8月Google发布Android 9.0,首次支持折叠屏功能,并推出了Android官方折叠屏适配指南。主要从以下几个方面进行适配:

    1. 应用连续性:处理配置变更
    2. 屏幕兼容性:resizeableActivitymaxAspectRatio
    3. 多窗口适配:多项恢复与专属资源访问
  2. 厂商补充适配方案

    各厂商陆续发布自己的折叠屏手机,以及补充的适配方案。不同折叠屏手机上,拥有各自研发的一些独有功能,要想体验这些独特功能,就需要使用厂商的方案进行适配。

    代表:三星、华为、Microsoft Surface Duo等。

  3. Google 2021 I/O 发布Jetpack WindowManager等库

    2021年5月,Google I/O开发者大会推出专门用于折叠屏适配的库 Jetpack WindowManager 1.0,以及更新了已有的一些库如:SlidingPaneLayoutNavRail等,以便应用更便捷的适配折叠屏功能。

    1. 新增 Jetpack WindowManager 1.0,专门用于适配折叠屏手机,获取折叠屏相关信息。
    2. 更新 SlidingPaneLayout 1.2,支持双窗格布局。
    3. 更新 NavRail,实现垂直导航栏。

3 Android 官方折叠屏适配指南

主要参考 官方文档

3.1 应用连续性:处理配置变更

在默认情况下,当屏幕发生了变化(这里指折叠屏折叠变化时,或应用从一个屏幕转到另一个屏幕),系统会销毁并重新创建整个 Activity

但我们希望屏幕变化之后,程序能够以切换前的状态继续运行,不需要重启页面。我们可以给 Activity 添加configChanges配置:

<activity
          ...
          android:configChanges="smallestScreenSize|screenSize|screenLayout" />

应用内监听变化,根据当前窗口大小,调整布局大小和位置

override fun onConfigurationChanged(newConfig: Configuration) {
   
		// 获取当前窗口配置信息,调整布局大小
}

如果需要重启 Activity才能完成适配的场景,可以通过onSaveInstanceState()onRestoreInstanceState()ViewModel对象来进行之前状态保存和后续的恢复。

更多详细适配参考官方:保存界面状态支持配置变更

3.2 屏幕兼容性

屏幕兼容性

3.2.1 应用大小可调:resizeableActivity

resizeableActivity 用于声明是否支持多窗口模式动态调整显示尺寸

折叠屏时,需要让应用支持动态改变尺寸,我们需要在 menifest 中的 Application 或对应的 Activity 下声明属性:

android:resizeableActivity="true"
  • 当系统编译设置target >= 24(Android 7.0) 不需要手动设置,系统默认为 true,支持多窗口和调节尺寸。

  • 如果应用设置 resizeableActivity=false,则会告知平台其不支持多窗口模式。系统可能仍会调整应用的大小或将其置于多窗口模式;但要实现兼容性,便需要对应用中的所有组件(包括应用的所有 Activity、Service 等)应用同一配置。在某些情况下,重大变更(例如,显示屏尺寸更改)可能会重启进程,而不会更改配置。这时需要支持折叠屏连续性(不重启Activity),添加属性

    <meta-data
        android:name="android.supports_size_changes" android:value="true" />
    
  • 若Activity 设置了 resizableActivity=false 以及 maxAspectRatio。设备展开时,系统会将应用置于兼容模式,以此保持 Activity 配置、大小和宽高比。


3.2.2 新的屏幕宽高比:maxAspectRatio(可选)

resizeableActivity=false声明不支持多窗口时,使用maxAspectRatiominAspectRatio 指定最小或最大纵横比,在设置的纵横比限制范围内,折叠屏情况下,会自动对尺寸进行调节,超出限制的进入兼容模式(黑边)。

为支持折叠屏,Android 系统增加了21:9(2.33,三星 Glaxy Fold 屏幕比例) 超大纵横比。

推荐纵横比设置范围:[1, 2.4],即1:1到12:5

在这里插入图片描述

而当resizableActivity=true时设置maxAspectRatio 等无效

更多信息参考 官方文档:声明受限屏幕支持

3.3 多窗口支持

更多多窗口功能参考:多窗口支持多项恢复设计

3.3.1 多项恢复

在 Android 10(API 29)增加多项恢复功能:所有顶层的可聚焦 Activity 均处于 RESUMED 状态。涉及多窗口的行为变化历史:

  1. Android 7.0 支持分屏:左右/上下显示两个窗口

  2. Android 8.0 支持画中画,此时处于画中画的Activity虽处于前台,但处于 Paused状态

  3. Android 9.0 (API 28) 及以下:多窗口下,只有获得焦点应用处于Resumed状态,其它可见Activity扔处于Paused状态,如下图左侧

  4. Android 10.0 (API 29) :多窗口模式时,个Acttivity全部处于Resumed状态

    在这里插入图片描述

为解决Android 9.0及以下,只有获得焦点应用才处于Resume状态,其它可见Activity处于Paused状态问题。可添加下列属性,手动添加开启多项恢复:

<meta-data
    android:name="android.allow_multiple_resumed_activities" android:value="true" />

3.3.2 专属资源访问

多窗口模式下,当Activity 获得/失去顶部位置状态时,会执行新增加的回调 Activity#onTopResumedActivityChanged(isTopResumed)isTopResumed 标识当前 Activity否处于多窗口模式下的最顶层

当我们使用了独占资源时就要用到这个方法。什么叫独占资源?麦克风、摄像头就是,这类资源同一时间只能给一个 Activity 使用。以摄像头使用为例,在Android10上,官方建议使用 CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged()监听摄像头是否可用。当收到Activity#onTopResumedActivityChanged(isTopResumed)回调时,

  • isTopResumed = false 时,需要在此时判断是否释放独占资源,而不必在一失去焦点时就释放资源;
  • isTopResumed = true 时 ,可以申请独占的摄像头资源,原持有摄像头资源的应用将收到 CameraDevice.StateCallback#onDisconnected() 回调后,对摄像头设备进行的后续调用将抛出 CameraAccessException

3.3.3 多窗口数据拖拽

多窗口下,支持跨应用数据拖拽功能,开始执行拖放操作时,来源应用必须设置 DRAG_FLAG_GLOBAL 标志,以示用户可以将数据拖动到其他应用,更多详情参考Android 官方文档:拖放

3.4 折叠屏适配更多优化

灵活布局

  • 使用wrap_contentmatch_parent避免硬编码

  • 使用 ConstraintLayout左根布局,方便屏幕尺寸变化,视图自动移动和拉伸

备用布局

  • 布局文件使用宽度、屏幕方向限定符(portland)单独适配
  • Fragment界面组件模块化

图片资源:.9图、矢量图

更多详细适配参考官方文档:支持不同的屏幕尺寸

4 厂商适配

折叠屏厂商发布了对应适配文档的主要有:三星、华为、微软等。

  1. 三星折叠屏适配

    主要参考三星折叠屏适配指导,基本同Android官方适配指南相差不大,部分需要独立适配的,只需针对三星屏幕信息进行适配即可。如折叠后纵横比 21 : 9,展开纵横比:4.2 : 3等。

  2. 微软Surface Duo双屏适配

    在Android 官方适配指南的基础上,可再参考Surface官方:Surface Duo 开发人员文档 进行完全适配。Surfce不仅提供了其独有的Surface 双屏布局库独有功能,还有部分适用于 Surface Duo 的 Android 示例应用

  3. 华为折叠屏适配官方文档

    华为折叠屏应用开发指导 包括提供给UX同学的设计指引,以及RD同学的接入指南。以下会重点介绍下其独有的华为应用内分屏:

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值