鸿蒙多功能工具箱开发实战(二十六)-无障碍访问支持
鸿蒙多功能工具箱开发实战(二十六)-无障碍访问支持前言无障碍访问是应用包容性的重要体现帮助视障、听障等用户群体更好地使用应用。本文将讲解HarmonyOS无障碍功能的实现。一、无障碍基础1.1 无障碍属性ArkUI组件支持以下无障碍属性属性说明accessibilityText无障碍文本accessibilityDescription无障碍描述accessibilityLevel无障碍等级accessibilityGroup是否为无障碍组1.2 基础用法EntryComponentstruct AccessiblePage{build(){Column(){// 图片添加无障碍描述Image($r(app.media.icon)).width(48).height(48).accessibilityText(应用图标).accessibilityDescription(多功能工具箱应用图标)// 按钮添加无障碍支持Button(计算).accessibilityText(计算按钮).accessibilityDescription(点击此按钮开始计算).onClick((){// 计算逻辑})// 输入框添加提示TextInput({placeholder:请输入金额}).accessibilityText(金额输入框).accessibilityDescription(请输入需要计算的金额)}}}二、无障碍组件封装2.1 无障碍按钮/** * 无障碍按钮组件 */Componentexportstruct AccessibleButton{Proptext:stringPropaccessibilityLabel:stringPropaccessibilityHint:stringPropdisabled:booleanfalseonButtonClick:()void(){}build(){Button(this.text).enabled(!this.disabled).accessibilityText(this.accessibilityLabel||this.text).accessibilityDescription(this.accessibilityHint).accessibilityLevel(this.disabled?no:yes).onClick((){if(!this.disabled){this.onButtonClick()}})}}2.2 无障碍图片/** * 无障碍图片组件 */Componentexportstruct AccessibleImage{Propsrc:Resource|stringPropalt:stringPropdescription:stringPropwidth:number100Propheight:number100build(){Image(this.src).width(this.width).height(this.height).alt(this.alt)// 图片加载失败时的替代文本.accessibilityText(this.alt).accessibilityDescription(this.description)}}2.3 无障碍列表项/** * 无障碍列表项 */Componentexportstruct AccessibleListItem{Proptitle:stringPropsubtitle:stringPropicon:stringonItemClick:()void(){}build(){Row(){if(this.icon){Text(this.icon).fontSize(24).margin({right:12})}Column(){Text(this.title).fontSize(16)if(this.subtitle){Text(this.subtitle).fontSize(12).fontColor(#999999).margin({top:4})}}.layoutWeight(1).alignItems(HorizontalAlign.Start)Text(›).fontSize(20).fontColor(#999999)}.width(100%).height(56).padding({left:16,right:16})// 无障碍支持.accessibilityGroup(true).accessibilityText(${this.title}${this.subtitle}).accessibilityDescription(双击进入).onClick((){this.onItemClick()})}}三、屏幕阅读器支持3.1 焦点管理EntryComponentstruct FocusManagementPage{StatefocusIndex:number0build(){Column(){// 焦点顺序控制Button(按钮1).tabIndex(1).defaultFocus(true)// 默认焦点.onClick((){})Button(按钮2).tabIndex(2).onClick((){})Button(按钮3).tabIndex(3).onClick((){})// 跳过装饰性元素Image($r(app.media.decoration)).accessibilityLevel(no)// 屏幕阅读器跳过}}}3.2 实时区域通知/** * 无障碍通知组件 */Componentexportstruct AccessibleAnnouncement{Statemessage:stringStateisVisible:booleanfalse/** * 显示通知 */show(msg:string):void{this.messagemsgthis.isVisibletrue// 3秒后自动隐藏setTimeout((){this.isVisiblefalse},3000)}build(){if(this.isVisible){Text(this.message).width(100%).height(48).backgroundColor(#333333).fontColor(#FFFFFF).textAlign(TextAlign.Center)// 实时区域屏幕阅读器会自动播报.accessibilityLiveRegion(polite)}}}四、最佳实践4.1 语义化结构EntryComponentstruct SemanticPage{build(){Column(){// 标题区域Column(){Text(计算结果).fontSize(24).fontWeight(FontWeight.Bold).accessibilityRole(header)}.accessibilityGroup(true)// 内容区域Column(){Text(税后工资: 12000元).accessibilityRole(text)Text(应纳税额: 500元).accessibilityRole(text)}.accessibilityGroup(true).accessibilityText(计算结果详情)// 操作区域Row(){Button(保存).accessibilityRole(button)Button(分享).accessibilityRole(button)}.accessibilityGroup(true).accessibilityText(操作按钮)}}}4.2 状态变化通知EntryComponentstruct StateAnnouncementPage{Stateloading:booleanfalseStateresult:stringasynccalculate(){this.loadingtrue// 通知用户正在加载this.announce(正在计算请稍候)awaitthis.doCalculate()this.loadingfalsethis.result计算完成// 通知用户结果this.announce(计算完成结果是this.result)}privateannounce(message:string){// 使用无障碍API播报// 实际实现需要调用系统无障碍服务}build(){Column(){if(this.loading){LoadingProgress().accessibilityText(正在计算)}else{Text(this.result).accessibilityText(计算结果: this.result)}}}}五、高级无障碍功能5.1 无障碍流程图是否用户操作无障碍服务检测是否开启?播报内容正常显示用户理解5.2 手势支持Componentstruct AccessibleGesture{onDoubleTap:()voidbuild(){Text(双击激活).accessibilityText(双击此按钮激活功能).gesture(TapGesture({count:2}).onAction(()this.onDoubleTap()))}}5.3 键盘导航Componentstruct KeyboardNavigation{StatefocusedIndex:number0build(){Column(){ForEach([选项1,选项2,选项3],(item:string,index:number){Text(item).focusable(true).defaultFocus(indexthis.focusedIndex).onKeyEvent((event){if(event.keyCodeKeyCode.KEYCODE_DPAD_DOWN){this.focusedIndexMath.min(this.focusedIndex1,2)}})})}}}图 1 无障碍设置页面选择是否启用六、小结本文详细讲解了无障碍支持✅ 无障碍属性使用✅ 无障碍组件封装✅ 焦点管理✅ 屏幕阅读器支持✅ 语义化结构✅ 手势支持✅ 键盘导航系列文章导航下期预告鸿蒙多功能工具箱开发实战(二十七)-安全加固与数据保护

相关新闻

TI ACTBP硬件设计解析:电容触摸与音频处理系统集成实战

TI ACTBP硬件设计解析:电容触摸与音频处理系统集成实战

1. 项目概述与核心价值在嵌入式系统开发,尤其是人机交互界面设计中,电容触摸技术因其直观、耐用和美观的特性,已经成为许多消费电子和工业产品的首选。然而,将高灵敏度的电容触摸与复杂的实时音频处理功能集成到一块紧凑的电路板上…

2026/10/13 9:46:24 阅读更多 →
云原生时代Linux内核优化与调优实践

云原生时代Linux内核优化与调优实践

1. 云原生时代对操作系统内核的新需求云计算技术发展到今天已经进入云原生阶段,这个转变对底层操作系统内核提出了全新的要求。传统Linux内核设计时主要面向物理服务器环境,而现代云环境需要内核具备更强的隔离性、弹性和资源调度能力。我在实际运维Kube…

2026/10/8 8:38:58 阅读更多 →
Linux网络协议栈架构与性能优化详解

Linux网络协议栈架构与性能优化详解

1. Linux网络模型概述在Linux系统中,网络通信的实现基于一套完整的网络模型架构。这套模型从底层的硬件驱动到上层的应用协议栈,构建了一个分层的网络处理体系。理解这个模型对于系统管理员、网络工程师和开发者来说都至关重要,它能帮助我们更…

2026/9/19 3:08:25 阅读更多 →

最新新闻

基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

1. 内容整体设计与思路拆解1.1 为什么是民宿推荐系统,而不是酒店预订系统先说个现象。很多人在做毕业设计时,一提到旅游住宿类系统,第一反应就是"酒店管理系统""民宿预订平台",但这类题目在答辩时很容易被打低…

2026/10/13 22:01:45 阅读更多 →
大模型应用落地实战指南:从选型到系统集成的全链路解析

大模型应用落地实战指南:从选型到系统集成的全链路解析

1. 项目概述:一张动态演进的“大模型生态地图”到底该怎么画?“国内外知名大模型及应用——模型/应用维度(2026/10/08)”这个标题,表面看是一份静态快照,实则暗含三重张力:时间戳“2026/10/08”…

2026/10/13 22:01:45 阅读更多 →
MFC界面美化完整案例:自绘控件、去标题栏与自适应布局

MFC界面美化完整案例:自绘控件、去标题栏与自适应布局

简介:这是一套面向Windows桌面开发者的MFC界面美化完整工程案例,可直接用VS2022打开运行,解决原生菜单栏、标题栏、按钮及列表控件外观老旧、贴图与自适应设计困难的问题。工程去除了MFC自带菜单和系统标题栏相关元素,对顶部区域自…

2026/10/13 22:01:45 阅读更多 →
cangaroo USB-CAN上位机源码:编译、调试与二次开发指南

cangaroo USB-CAN上位机源码:编译、调试与二次开发指南

简介:这是一份Cangaroo USB-CAN上位机完整源码,采用Qt图形界面框架开发,面向需要进行CAN总线数据监控、报文分析与设备调试的软硬件工程师。压缩包共包含两百一十四份文件,其中C和C语言的头文件与实现文件占主要比例,还…

2026/10/13 22:01:45 阅读更多 →
烂番茄影评情感分类实战:Python实现从TF-IDF到BiLSTM

烂番茄影评情感分类实战:Python实现从TF-IDF到BiLSTM

简介:基于Python实现对烂番茄电影评论情感分类的完整实践项目,来源于华中科技大学大数据与人工智能课程大作业。项目包含源码、实验报告与数据集,覆盖评论获取、文本预处理、情感特征提取、模型训练与评估等环节,适合计算机、人工…

2026/10/13 22:01:45 阅读更多 →
开源AI工具实战:让大模型从聊天到本地自动化干活

开源AI工具实战:让大模型从聊天到本地自动化干活

1. 从聊天到干活:这个开源AI工具到底在解决什么问题大多数人第一次接触AI,都是通过对话框。你问一句,它答一句,聊得挺热闹,但聊完之后呢?该手动复制的还得手动复制,该自己打开软件操作的还得自己…

2026/10/13 22:00:44 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →