HarmonyOS应用实战-启示散页-36-大字体适配别只放大字号:把触控区、换行和滚动一起算
HarmonyOS应用实战-启示散页-36-大字体适配别只放大字号把触控区、换行和滚动一起算这不是把一个概念换个名字再讲一遍。本文从The_Book_of_Answers的现有代码出发先确认能证明的实现再说明 将字体缩放、最小触控区和长文本策略看成同一份布局约束而不是只调 fontSize。。读完后读者应该能判断这件事该落在哪一层、何时写入、失败时怎样回退而不是只得到一段看起来能跑的片段。先说明本文的代码边界项目结论写作定位当前代码事实 明确的扩展设计已核对事实首页输入框、图标入口和主按钮已有固定高度主题尺寸集中在 AppFont、AppSpace 与 AppRadius。本篇要补的边界将字体缩放、最小触控区和长文本策略看成同一份布局约束而不是只调 fontSize。主要 ownerAccessibilityLayoutPolicy拟新增对照源码entry/src/main/ets/pages/Index.etslibraryHAR/src/main/ets/theme/Tokens.etslibraryHSP/src/main/ets/pages/DrawingPage.ets这张表很重要。它把“仓库已经具备的能力”和“为了本题建议新增的能力”分开写避免把设计草图误当成现状说明。现场症状不是一个 UI 小问题字号增大后文字可能没被裁掉但按钮可点区、Sheet 底部和多行卡片已经失衡。 这类问题表面上通常只表现为一次点击无响应、列表顺序不对或重启后状态变化真正难点在于页面、服务、仓储和运行期信号各自只掌握一部分事实。若让最靠近按钮的组件兼任所有角色后续增加入口时一定会出现行为分叉。可以把本篇的问题链压缩为输入进入 → 规则判断 → 一次可追踪写入 → 相关页面刷新 → 重启后的恢复验证。任何一步没有明确 owner都会把故障留给下一个页面处理。先从已存在的代码找证据本篇不假定项目中已经存在AccessibilityLayoutPolicy拟新增。已经存在、且应优先复用的事实是首页输入框、图标入口和主按钮已有固定高度主题尺寸集中在 AppFont、AppSpace 与 AppRadius。。对应源码位于entry/src/main/ets/pages/Index.etslibraryHAR/src/main/ets/theme/Tokens.etslibraryHSP/src/main/ets/pages/DrawingPage.ets。这意味着后续设计应接在既有Repository / Service / AppStorage的职责边界上而不是重新发明一条平行链路。例如AppStorage在当前工程里用于传递CurrentDeckId、LastDeckUpdateAt等轻量刷新信息完整题库、收藏和历史仍由仓储读写。这个分工能让页面重新进入、冷启动和跨入口调用得到同一份最终事实。源码摘录entry/src/main/ets/pages/Index.ets.fontSize(AppFont.body).fontFamily(serif).caretColor(AppColor.goldWarm).height(48).layoutWeight(1).borderRadius(AppRadius.lg).backgroundColor(#2A1F17CC).border({width:1,color:AppColor.goldEdge}).padding({left:AppSpace.lg,right:AppSpace.lg}).maxLength(MAX_QUESTION_LEN).onChange((v:string){this.questionv;这段是本篇依赖的当前实现不是为了文章临时编造的接口。后面的代码若写为“设计示例”只能在这段既有边界之外补齐能力不能改写它已经承担的职责。按问题类型定位断点本题从交互触发但落点不应停在 UI。页面需要即时反馈然而持久化和回滚必须由AccessibilityLayoutPolicy拟新增或既有服务给出确定结果。这样无论用户快速点击、字体变化、转场中断还是从其他路由返回控件状态都可以重新由数据事实推导而不是依赖上一次渲染。先确认已有实现是否已经覆盖了本题的一部分。再把没有覆盖的部分写成可验证的扩展边界。最后用异常入口与重启结果反证这条边界没有停留在页面内存。本篇的决策先计算布局规格再把规格传给输入、卡片和弹层不要散落魔法数字。AccessibilityLayoutPolicy拟新增的职责不是“替页面做完所有事”而是把本主题的判断集中到一个位置。它要接受可验证输入、调用已有服务或仓储、在成功后发布最小刷新信号它不应持有 ArkUI 组件、Sheet 开关、动画进度或临时文本框状态。层级应负责的事不应顺手做的事页面收集意图、展示结果、给出失败提示直接写 Preferences、拼接持久化结构AccessibilityLayoutPolicy拟新增校验、规则、回退和一次业务提交保存组件引用、控制动画Repository / 现有 Service保存和读取稳定数据判断页面文案、Toast 内容AppStorage只通知相关 owner 重新读取保存整份业务对象数据契约先于页面文案本主题需要稳定的数据描述fontScale: numberminTouchHeight: numbermaxPreviewLines: number。。字段越少后续越容易判断哪一个变化真的需要持久化。尤其是把“用户内容”“运行期刷新信号”“页面临时状态”混在同一个对象中时重启与回退的语义会立刻变得模糊。// 当前边界首页输入框、图标入口和主按钮已有固定高度主题尺寸集中在 AppFont、AppSpace 与 AppRadius。// 本段只描述需要守住的输入与输出不把页面状态写入持久化层。interfaceAccessibilityLayoutPolicy拟新增Input{source:string;subjectId?:string;}这段模型刻意很小它只让服务知道入口来源和业务对象身份。页面的展开、动画、按钮禁用状态都不应该进入这个接口。// 设计示例仅在本篇所述能力落地时新增。classAccessibilityLayoutPolicy拟新增{asyncexecute(input:AccessibilityLayoutPolicy拟新增Input):Promisevoid{if(!input.source){thrownewError(entry source is required);}// 先校验再调用既有 Repository / Service不要在这里操作 ArkUI 组件。}}这个示例的重点不是新建一个类而是把校验、业务规则和 UI 回调分开。若项目没有这项扩展就不应把类名写进“已实现”清单。// 页面侧只提交意图成功后的刷新信号由业务服务发出。privateasynconConfirm():Promisevoid{awaitnewAccessibilityLayoutPolicy拟新增().execute({source:page});// 不直接写 PreferencesStore也不把完整对象塞进 AppStorage。}页面只拥有交互时机。这样相同操作将来从快捷入口、恢复页或设置页触发时仍然只会走一套规则。验收口径 1. 无效输入在业务边界被拒绝并能回到可理解的页面状态。 2. 成功路径只产生一次持久化写入和一次相关刷新。 3. 重启后以 Repository 的结果为准不依赖页面内存。 4. 诊断输出不包含用户问题、答案全文或整份题库。rg-nAccessibilityLayoutPolicy拟新增|fontScale: number|AppStorageKeyD:\ProgramData\huawei\lesson\The_Book_of_Answersrg-nIndexD:\ProgramData\huawei\lesson\The_Book_of_Answers排查时先从 owner 与数据契约找起再回到页面调用点。只搜索按钮文本通常只能找到症状所在的位置。落地前的三次反向确认第一先问现有代码是否已经提供了更窄的能力可以复用。本篇已核对的事实是首页输入框、图标入口和主按钮已有固定高度主题尺寸集中在 AppFont、AppSpace 与 AppRadius。。如果直接绕开这条路径新功能会复制一份相近但不完全相同的校验与刷新逻辑。第二再问fontScale: numberminTouchHeight: numbermaxPreviewLines: number。中哪些字段必须跨重启存在。只有能影响下一次启动、另一个入口或数据恢复的字段才需要进入仓储其余状态留在页面即可。这个判断能避免为了“方便刷新”而把临时 UI 对象写入全局状态。第三反过来构造一次失败只把所有字号乘以比例会让视觉正确而操作失败。。若这条失败路径没有可解释的结果说明 owner 的职责仍然太模糊应该先补回退结果再考虑扩展交互。为什么不能在页面里直接兜底错误做法通常看起来很省事在点击回调里读原始数据、改几个字段、写入 Preferences再自己把本地State调成“成功”。它会在第一个入口中工作但外部拉起、返回页面、恢复页或另一个窗口不会复用这个回调。本篇应避免的风险是只把所有字号乘以比例会让视觉正确而操作失败。。正确的判断标准不是“当前页面是否更新”而是“相同输入从任何入口进入后是否得到同一份持久化结果和同一条刷新语义”。验证要覆盖恢复而不只覆盖正常点击在系统大字体、横屏和最小屏宽下逐一验证输入、结果、收藏和历史 Sheet。 建议按下面顺序执行从正常页面入口走一遍记录写入前后数据差异。给出空值、过期值或已删除 id确认在 owner 处失败而不是在 UI 深处崩溃。执行完成后离开并重新进入相关页面确认它通过仓储重新读取正确结果。重启应用后再次核对确认没有依赖上一次页面的内存状态。检查日志、截图和导出文本不包含用户问题、答案全文或整份题库。常见误判与处理方式现象首先检查处理方式页面更新但重启后恢复原样是否只改了State把最终写入收回到 Service / Repository多入口表现不同是否绕过AccessibilityLayoutPolicy拟新增统一把输入归一化后交给一个 owner列表没有刷新写入后是否只有正确的刷新信号让订阅者重新拉取不共享可变大对象排障信息不够或泄露内容日志是否记录了正文只保留 id、数量、阶段与错误码取舍保持轻量但不牺牲可解释性The_Book_of_Answers是本地优先的轻量应用因此不需要为了单一需求引入庞大框架。合适的复杂度是一个清晰 owner、一个小契约、复用现有仓储与服务、一个可观察的刷新信号以及一组能覆盖重启和异常入口的验证步骤。这样既不会把规则散回 UI也不会把每个功能都做成难以维护的大模块。这里的“轻量”不等于省掉边界。只要一个功能会改变本地内容、影响多个页面或需要在发布后被解释它就应当留下最小的持久化事实与验证证据反之纯展示状态不应借机渗入 Repository。这个取舍比新增多少类更重要。小结本篇的关键不是类名而是这条边界先计算布局规格再把规格传给输入、卡片和弹层不要散落魔法数字。。只要继续坚持“页面提交意图、服务处理规则、仓储保存事实、AppStorage 只通知刷新”这个主题无论未来从首页、快捷入口还是恢复流程进入都不会再演变成多套不一致的临时写法。

相关新闻

HarmonyOS应用实战-启示散页-35-答案文本过长别撑破卡片:用摘要、全文弹层和复制链路分层展示

HarmonyOS应用实战-启示散页-35-答案文本过长别撑破卡片:用摘要、全文弹层和复制链路分层展示

HarmonyOS应用实战-启示散页-35-答案文本过长别撑破卡片:用摘要、全文弹层和复制链路分层展示 这不是把一个概念换个名字再讲一遍。本文从 The_Book_of_Answers 的现有代码出发,先确认能证明的实现,再说明 为长答案建立展示模型:摘…

2026/10/16 2:49:18 阅读更多 →
HarmonyOS应用实战-启示散页-34-最近使用题库别靠数组顺序:用 lastUsedAt 排出真实入口

HarmonyOS应用实战-启示散页-34-最近使用题库别靠数组顺序:用 lastUsedAt 排出真实入口

HarmonyOS应用实战-启示散页-34-最近使用题库别靠数组顺序:用 lastUsedAt 排出真实入口 这不是把一个概念换个名字再讲一遍。本文从 The_Book_of_Answers 的现有代码出发,先确认能证明的实现,再说明 如果产品确实要“最近使用”,必…

2026/10/16 8:26:42 阅读更多 →
【JAVA毕设源码分享】基于Vue动漫周边商场的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于Vue动漫周边商场的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/10/17 18:41:27 阅读更多 →

最新新闻

OpenProject 开源项目管理软件:社区版免费自部署,任务与甘特图排期完整指南

OpenProject 开源项目管理软件:社区版免费自部署,任务与甘特图排期完整指南

OpenProject 开源项目管理软件:社区版免费自部署,任务与甘特图排期完整指南 【免费下载链接】openproject OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alter…

2026/10/18 1:36:47 阅读更多 →
树莓派桌面系统登陆PC与Mac:轻量Linux发行版深度体验

树莓派桌面系统登陆PC与Mac:轻量Linux发行版深度体验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 1:36:47 阅读更多 →
UNIHH-IOT:轻量级物联网平台的高性能实现原理

UNIHH-IOT:轻量级物联网平台的高性能实现原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 1:36:47 阅读更多 →
TWS耳机芯片选型指南:11家原厂26款方案深度解析

TWS耳机芯片选型指南:11家原厂26款方案深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 1:36:47 阅读更多 →
你的表征学得再“准”,真的是“因果”而不是“碰巧相关”吗?

你的表征学得再“准”,真的是“因果”而不是“碰巧相关”吗?

全文目录:开篇语前言1) 研究问题:我们到底想让表征“泛化”到什么程度?2) 背景与意义:为什么深度表征特别爱学“相关性捷径”?3) 文献与缺口:理论很多,能跑又能扩展的框架还不够“顺手”4) 方法…

2026/10/18 1:36:47 阅读更多 →
WeChatMsg 微信聊天记录导出实操:离线、只读,一次跑通 HTML/Word/CSV

WeChatMsg 微信聊天记录导出实操:离线、只读,一次跑通 HTML/Word/CSV

WeChatMsg 微信聊天记录导出实操:离线、只读,一次跑通 HTML/Word/CSV 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

2026/10/18 1:35:47 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →