HarmonyOS掌上记账APP开发实践第76篇:折叠屏适配 — 从手机到折叠屏的响应式布局策略
折叠屏适配 — 从手机到折叠屏的响应式布局策略文章简介折叠屏设备代表了移动计算的新形态在展开状态下提供接近平板的屏幕面积在折叠状态下保持手机形态而半折叠tent模式则创造了独特的桌面级使用场景。HarmonyOS 为折叠屏适配提供了一整套支持包括 BreakpointSystem 断点系统、折叠状态监听FoldStatus和折轴区域处理FoldCreaseRegion。MoneyTrack 利用这些能力实现了从手机到折叠屏的平滑适配本文详细剖析适配策略。折叠屏的三种形态折叠屏设备在物理上存在三种明确的形态应用需要针对每种形态做出不同的布局响应。下图展示了这三种形态以及对应的适配策略折叠屏设备折叠状态FOLDED展开状态EXPANDED半折叠状态HALF_FOLDED屏幕尺寸≈手机竖屏单列布局使用 SM 断点背景图 Contain 模式屏幕尺寸≈平板横屏多列布局使用 LG 断点背景图 Fill 模式弹窗代替全页导航折轴位于中间避开交互元素Tent 模式上半屏显示/下半屏操控核心知识点1. BreakpointSystem 断点系统BreakpointSystem 是 MoneyTrack 在 commonlib 中封装的断点管理工具。它基于UIContext.getWindowWidthBreakpoint()获取当前窗口的断点类型WIDTH_XS、WIDTH_SM、WIDTH_MD、WIDTH_LG映射为自定义的BreakpointTypeEnumSM、MD、LG。完整的断点映射关系如下表所示断点类型窗口宽度范围典型设备MoneyTrack 布局表现XS0~320vp小屏手机单列紧凑布局SM320~600vp常规手机单列标准布局MD600~840vp折叠屏展开/小平板双列或加宽布局LG≥840vp平板/大屏折叠多列布局弹窗模式export enum BreakpointTypeEnum { SM sm, // 映射 WIDTH_XS WIDTH_SM MD md, // 映射 WIDTH_MD LG lg, // 映射 WIDTH_LG } export class BreakpointSystem { Trace currentBreakpoint: BreakpointStorage AppStorageV2.connect(BreakpointStorage, () new BreakpointStorage())!; Computed get isTablet() { return this.currentBreakpoint.value BreakpointTypeEnum.LG; } Computed get isFoldable() { return this.currentBreakpoint.value BreakpointTypeEnum.MD; } }通过Computed计算属性isTablet判断当前是否为平板/大屏模式isFoldable判断是否为折叠屏展开模式组件中通过BreakpointSystem.isTablet访问。2. 折叠状态监听FoldStatusHarmonyOS 的display.FoldStatusAPI 提供了三种状态监听import { display } from kit.ArkUI; enum FoldStatus { FOLDED 0, // 折叠状态设备闭合 EXPANDED 1, // 展开状态设备完全打开 HALF_FOLDED 2, // 半折叠状态设备呈一定角度打开 } // 查询当前折叠状态 const foldStatus display.getFoldStatus(); // 监听折叠状态变化 display.on(foldStatusChange, (status: display.FoldStatus) { switch (status) { case display.FoldStatus.FOLDED: // 切换到单栏布局 break; case display.FoldStatus.EXPANDED: // 切换到多栏布局 break; case display.FoldStatus.HALF_FOLDED: // 进入半折叠模式 break; } });应用可以根据折叠状态动态调整布局——折叠时使用竖屏单列布局展开时切换为横屏多列布局半折叠时则进入 tent 模式。3. 折轴区域处理FoldCreaseRegion在半折叠tent模式下屏幕中间会有一个折轴区域屏幕折叠的物理折痕如果交互按钮恰好位于折轴上用户将获得极差的操作体验。可以通过getCreaseRegion()API 获取折轴位置并避开import { display } from kit.ArkUI; // 获取折轴区域 const creaseRegions: display.FoldCreaseRegion[] display.getCreaseRegions(); if (creaseRegions.length 0) { const region creaseRegions[0]; // 获取第一个折轴区域 console.info(折轴区域(${region.posX}, ${region.posY}), 大小${region.width} x ${region.height}); // 在布局时避开此区域放置交互元素 }4. 半折叠模式Tent 模式适配半折叠模式下将设备放置在桌面上呈帐篷状tent 模式上半屏面向用户、下半屏朝下。此时可以采用上半屏显示内容下半屏作为操控面板的布局策略if (foldStatus display.FoldStatus.HALF_FOLDED) { // tent 模式上半屏显示主内容下半屏显示控制面板 Column() { // 上半区内容展示 ContentArea().height(50%) // 下半区操控面板 ControlPanel().height(50%) } .height(100%) }项目代码案例BreakpointSystem.isTablet 控制 HomeView 背景图适配模式文件路径features/home/src/main/ets/views/HomeView.ets.backgroundImageSize(BreakpointSystem.isTablet ? ImageSize.FILL : ImageSize.Contain)在手机SM上背景图采用Contain模式以适应竖屏窄宽度在折叠屏展开或平板LG上采用Fill模式填满更宽的屏幕。MemberSubscriptionPage 的双 UI 形态文件路径components/membership/src/main/ets/pages/MemberShipPage.ets通过isSheet参数控制页面呈现形态。在折叠屏展开状态下isSheettrue会员页面以弹窗形式展示在手机形态下isSheetfalse以全页形式展示。GridCol({ span: { xs: 12, sm: 12, md: 12, lg: this.isSheet ? 12 : 8 }, offset: { xs: 0, sm: 0, md: 0, lg: 2 }, })最佳实践维度建议说明断点使用优先使用 BreakpointSystem 而非硬编码宽度断点系统自动响应窗口变化状态监听注册 foldStatusChange 监听及时响应折叠状态变化交互元素避开折轴区域使用 getCreaseRegions 获取折轴位置半折叠模式上下分屏布局上半显示内容下半承载操控资源管理合理使用 dark/light 资源目录确保折叠屏在不同角度下的视觉一致性测试验证在模拟器和真机上都进行测试折叠屏的物理特性模拟器无法完全覆盖推荐参考文档HarmonyOS 折叠屏适配指南display.FoldStatus API 文档ArkUI GridRow/GridCol 响应式网格布局BreakpointSystem 断点系统介绍display.getCreaseRegions 折轴区域 API

相关新闻

从零手写ECS框架:深入理解数据导向编程与Unity DOTS性能优化

从零手写ECS框架:深入理解数据导向编程与Unity DOTS性能优化

1. 项目概述:为什么是DOTS与ECS?如果你是一位Unity开发者,最近几年肯定没少被“DOTS”、“ECS”、“性能爆炸”这些词刷屏。但说实话,很多教程要么一上来就讲深奥的计算机原理,要么直接丢出一段“魔法代码”让你照抄&a…

2026/7/24 2:42:35阅读更多 →
P1706 全排列问题

P1706 全排列问题

记录159 #include<bits/stdc.h> using namespace std; int path[15]; bool vis[15]; int n; void dfs(int cnt){if(cnt>n){for(int i1;i<n;i) cout<<" "<<path[i];cout<<"\n";return;}for(int i1;i<n;i){if(vis[i]…

2026/7/24 2:42:35阅读更多 →
【单片机毕业设计推荐】 基于 51/STM32 单片机的智能台灯与温控风扇控制系统设计,基于 51/STM32 单片机的人体感应环境调控装置设计与实现(011903)

【单片机毕业设计推荐】 基于 51/STM32 单片机的智能台灯与温控风扇控制系统设计,基于 51/STM32 单片机的人体感应环境调控装置设计与实现(011903)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能基础功能核心功能辅助功能技术路线项目演示关于我们项目案例源码获取博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&…

2026/7/24 2:42:35阅读更多 →
新版 XXX税查验能力建设:验证码识别训练合成与协议适配实践

新版 XXX税查验能力建设:验证码识别训练合成与协议适配实践

一、背景近期在做发票查验相关系统升级时&#xff0c;发现新版 XXX税查验流程相比旧版本发生了明显变化。除了查验入口、验证码形式、参数结构有所调整外&#xff0c;返回数据也变得更加完整&#xff0c;包含查验结果、发票状态、购销方信息、明细项目、附加标签等多层级结构。…

2026/7/24 4:11:10阅读更多 →
AI模型随机数生成偏好:识别套壳API的行为指纹技术

AI模型随机数生成偏好:识别套壳API的行为指纹技术

上周和一位做 API 集成的朋友聊天&#xff0c;他提到一个头疼的问题&#xff1a;现在很多宣称自研的 AI 服务&#xff0c;其实背后都是套壳的第三方模型。表面上看功能差不多&#xff0c;但一到生产环境&#xff0c;响应稳定性、成本控制和后续迭代就完全不是一回事。更麻烦的是…

2026/7/24 4:11:10阅读更多 →
开源项目精选与实战指南:Llama 2、Semantic Kernel等解析

开源项目精选与实战指南:Llama 2、Semantic Kernel等解析

1. 开源生态的价值与现状开源软件已经成为现代技术发展的基石。根据2023年开源安全基金会&#xff08;OpenSSF&#xff09;的报告&#xff0c;全球97%的商业软件包含开源组件&#xff0c;平均每个应用程序依赖超过500个开源包。这种开放性协作模式不仅降低了技术门槛&#xff0…

2026/7/24 4:11:10阅读更多 →
C++实现ADS-B数据解析:从协议解码到飞机位置追踪

C++实现ADS-B数据解析:从协议解码到飞机位置追踪

1. 项目概述&#xff1a;从无线电波到飞行数据如果你对航空感兴趣&#xff0c;或者手头正好有一个RTL-SDR之类的软件无线电接收器&#xff0c;那你很可能听说过ADS-B。简单来说&#xff0c;ADS-B&#xff08;广播式自动相关监视&#xff09;是现代民航飞机向外广播自己身份、位…

2026/7/24 4:11:10阅读更多 →
AI落地服装店:从流量焦虑到经营闭环,哪些能力真实可用?

AI落地服装店:从流量焦虑到经营闭环,哪些能力真实可用?

2026年&#xff0c;服装零售行业持续承压。客流下降、消费分化、线上竞争白热化&#xff0c;这三个老问题依然没有标准答案。唯一确定的是&#xff0c;行业对“AI”这个词已经不再陌生。从店门口的人脸识别客流统计&#xff0c;到后台的智能补货建议&#xff0c;再到店员手机里…

2026/7/24 4:11:10阅读更多 →
从零上手TI DRV2605L触觉驱动芯片:评估板实战与硬件设计精解

从零上手TI DRV2605L触觉驱动芯片:评估板实战与硬件设计精解

1. 项目概述与核心价值如果你正在设计一款带有触觉反馈的智能手表、游戏手柄或者车载中控屏&#xff0c;那么你大概率绕不开一个核心问题&#xff1a;如何高效、稳定且精准地驱动那颗小小的振动马达&#xff1f;是选择结构简单的偏心转子马达&#xff08;ERM&#xff09;&#…

2026/7/24 4:09:10阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好&#xff0c;我是一名编程初学者&#xff0c;同时这也是我编程学习之路上的第一篇博客。在这里&#xff0c;我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手&#xff0c;目前在学习c语言&#xff0c;我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述&#xff1a; 解法&#xff1a; 1、模拟&#xff08;参考自【LeetCode 54】螺旋矩阵-CSDN博客&#xff09; int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会&#xff0c;昔日AI六小龙来了五家&#xff0c;分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了&#xff0c;唯一缺席的竟是近几个月来风光无限的智谱。&#xff08;DeepSeek一直不参加&#xff09;WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →