Foldable Device(折叠设备)— 是一类具有柔性显示屏的移动设备,在折叠和展开时改变形态。此类设备根据屏幕位置既可作为紧凑型手机使用,也可作为平板电脑使用。根据 Android Developers(2025),2024年全球折叠设备市场增长了42%,为此形态适配应用程序正成为大型项目的必然要求。
要点
Foldable Device — 是一种具有柔性 OLED 显示屏的移动设备,可在不损坏矩阵的情况下折叠。折叠状态下,此类设备紧凑便携,可放入口袋;展开状态下,提供平板电脑大小的屏幕。首款量产折叠设备是 Royole FlexPai(2018),但三星 Galaxy Fold(2019)和华为 Mate X 使这一类别得到推广。
折叠设备与传统设备的 key 区别在于铰链(hinge)和柔性显示屏的存在。折叠时,显示屏不会破裂,而是根据铰链结构确定的半径弯曲。现代技术(UTG — 超薄玻璃,2020+ 和 Samsung Infinity Flex)可承受多达 200,000 次折叠循环而无明显损坏。
对于开发者而言,折叠设备带来三项挑战:展开时屏幕尺寸变化、折痕(crease)的存在以及半开状态(桌面模式)下的工作,即设备以一定角度立于平面上。
书本式(book-style) — Galaxy Z Fold、Google Pixel Fold、OnePlus Open。外部屏幕(cover screen)用于折叠状态下的使用,内部柔性显示屏(inner screen)用于平板模式。外部屏幕的宽高比约为 22:9,内部屏幕约为 6:5 或 4:3。
翻盖式(flip-style) — Galaxy Z Flip、Motorola Razr、Oppo Find N2 Flip。垂直折叠,外部显示屏用于通知(1.5–3.5 英寸),内部显示屏为标准手机尺寸(6.7–7 英寸)。主要特点 — 在半开状态(flex mode)下,应用程序可将屏幕分为两个区域:上方控制,下方内容。
双屏 — Microsoft Surface Duo、Lenovo ThinkPhone。两个独立显示屏,中间有铰链。展开时形成共同区域,但屏幕之间存在物理间隙。API 考虑铰链角度,允许应用程序在两个屏幕上延伸。
Google 提供 Jetpack WindowManager 用于处理折叠设备。API 包含三个关键组件:WindowLayoutInfo — 折叠位置信息(fold)、WindowPosture — 设备的物理位置以及 FoldingFeature — 弯曲区域的描述:方向、状态和角度。
FoldingFeature 包含折叠类型(hinge — 铰链、fold — 柔性显示屏)、状态(flat — 展开、half-opened — 半开、folded — 折叠)和弯曲角度(0 到 180 度)。角度在具有角度传感器的设备上可用(Galaxy Z Fold、Pixel Fold)。
val windowInfoRepository =
WindowInfoTracker.getOrCreate(context)
windowInfoRepository.windowLayoutInfo(context)
.collect { layoutInfo ->
layoutInfo.displayFeatures
.filterIsInstance<FoldingFeature>()
.forEach { feature ->
// 处理折叠
}
}
要确定设备是否可折叠,请使用 PackageManager.hasSystemFeature("android.hardware.sensor.hinge_angle")。在带铰链的设备上,此传感器存在 — 在普通手机上则没有。
界面适配 — 开发者支持折叠设备时的主要任务。展开时,窗口宽度可能加倍,界面必须从单列切换为多列。使用 Window Size Class 在布局之间切换 — 展开时,类别从 Compact 变为 Expanded。
特别关注配置变更的处理。当用户展开设备时,Activity 可能被重新创建。如果应用未保存状态,用户将丢失已输入的数据或滚动位置。使用 ViewModel 处理屏幕数据,使用 onSaveInstanceState 处理 UI 状态。
对于 flex mode(桌面模式),设计应将屏幕分为两个功能区域。上部 — 内容查看(视频、图库、列表),下部 — 控制(按钮、控制器、键盘)。此模式在视频播放器中应用:YouTube 在 Galaxy Z Flip 上将视频显示在上方,推荐和按钮显示在下方。
测试 — 为折叠设备开发中最困难的方面之一。Android Emulator 可通过 AVD 使用 "Foldable" 配置(内部 7.6 英寸显示屏,外部 4.6 英寸显示屏)模拟折叠设备。模拟器支持折叠和展开状态之间的切换。
在模拟器中测试使用 ADB。命令 adb shell am broadcast -a android.intent.action.VIEW -e mode expand 展开设备,adb shell am broadcast -a android.intent.action.VIEW -e mode fold 折叠设备。在模拟器窗口中也可更改弯曲角度。
建议在实际物理设备上进行测试,以检查过渡感、铰链质量和折痕可见性。主要测试机型:Samsung Galaxy Z Fold 6(书本式)、Samsung Galaxy Z Flip 6(翻盖式)、Google Pixel Fold、Motorola Razr 50。
不要将关键元素放置在弯曲区域。按钮、输入框和交互元素应距折痕线至少 24 dp。折痕(crease)— 柔性屏幕的固有特性,其可见度随每一代产品降低,但不会完全消失。
使用连续性而非中断。展开时,内容应从外部屏幕平滑流淌到内部屏幕或扩展到整个区域。避免加载新的 Activity — 在同一屏幕内重新计算布局。Jetpack WindowManager 跟踪变化并通过 WindowLayoutInfo 通知应用。
考虑铰链角度以创造性的场景。在照片和视频应用中,半开位置(90°)将设备变为支架:相机拍摄,屏幕下部显示控制面板。此场景在 Samsung Camera 和原生应用中尤为流行。
常见问题
检查 PackageManager.FEATURE_SENSOR_HINGE_ANGLE 是否存在。如果为 true — 设备带有铰链角度传感器,为可折叠设备。同时检查 DisplayFold API。
订阅 WindowInfoTracker.windowLayoutInfo()。当 FoldingFeature 状态变化时,根据 Window Size Class 和折痕位置重新排列界面。
Jetpack WindowManager 在 API 14+ 上运行。但 FoldingFeature.HALF_OPENED 需要 API 24+(Android 7.0)。铰链角度传感器在 Android 10+ 上可用。
不需要。使用 Jetpack WindowManager 的 Window Size Class 和 Layoutomization。带尺寸类别检查的统一代码将替代单独的资源布局。
大多数折叠设备具有 IP48 或 IP58 防护 — 有限的防水性能。在水下,柔性显示屏可能损坏,因此制造商不建议浸水。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。