【鸿蒙开发示例代码】无障碍模式

代码工程地址:

AccessibilityBasedCapabilities: 本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 (gitee.com)

基于原生能力的无障碍模式

介绍

本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。

效果图预览

原生组件屏幕朗读:

创建说明:

  1. 在已创建工程的ets文件夹下创建accessibility文件夹,在该文件夹下创建AccessibilityExtAbility.ets文件,可在该文件中实现一些回调函数,并加入业务处理逻辑的调用,具体可参考src/main/ets/accessibility/AccessibilityExtAbility.ets代码。
  2. 在已创建的accessibility文件夹下创建AccessibilityManager.ets文件,用于存放业务逻辑代码,可参考src/main/ets/accessibility/AccessibilityManager.ets进行实现。
  3. 在src/main/module.json5下新增扩展服务的配置信息,其中srcEntry标签为extensionAbility对应的路径。需要注意的一点是配置信息中的type标签要按照与无障碍子系统的约定进行配置,固定为accessibility,否则将无法正常连接。
"extensionAbilities": [
  {
    "name": "AccessibilityExtAbility",
    "srcEntry": "./ets/accessibility/AccessibilityExtAbility.ets",
    "label": "$string:MainAbility_label",
    "description": "$string:MainAbility_desc",
    "type": "accessibility",
    "metadata": [
      {
        "name": "ohos.accessibleability",
        "resource": "$profile:accessibility_config"
      }
    ]
  }
]
  1. 另外,配置信息中的accessibility_config为无障碍扩展服务的具体配置,需要在resources/base/profile/下新建accessibility_config.json文件,在该文件中声明此无障碍扩展服务具备的能力类型,根据业务功能合理声明能力类型,本案例中,需要如下声明:
{
  "accessibilityCapabilities": [
    "retrieve",
    "gesture",
    "touchGuide"
  ]
}

使用说明:

  1. 打开设置->辅助功能->屏幕朗读->屏幕朗读选项。
  2. 打开屏幕朗读后,关键手势如下:
    1. 单击选择某个项目,双击确认选择。
    2. 返回桌面及桌面切换等原有的单指操作都需要换成两指操作。
    3. 下滑屏幕朗读下一项,上滑屏幕朗读上一项。
  3. 打开应用,下滑或上滑查看朗读情况。

工程目录

工程的目录结构

├──entry/src/main/ets                         // 代码区
│  ├──accessibility
│  │  ├──AccessibilityExtAbility.ets          // 无障碍扩展ability
│  │  └──AccessibilityManager.ets             // 无障碍扩展管理
│  ├──common
│  │  └──Constants.ets                        // 常量 
│  ├──entryability
│  │  └──EntryAbility.ets                     // EntryAbility
│  ├──pages
│  │  └──Index.ets                            // 组合标注sample页
│  ├──utils
│  │  └──Logger.ets                           // 日志工具类
│  ├──view
│  │  └──WeatherLine.ets                      // 天气行组件
│  └──viewmodel
│     └──WeatherViewModel.ets                 // 天气数据viewmodel
└──entry/src/main/resources                   // 应用资源目录

具体实现

使用原生组件时,即可自然支持无障碍能力,但是在一些场景中,一个功能上完整的UI对象可能是由若干个更小的UI组件组合而成的。若每一个小的UI组件都可以获焦并朗读,则会造成信息冗余和效率降低。同时由于可聚焦的组件过多过细,也会影响触摸浏览时走焦的性能体验。此时需要将多个控件设置为一个组,通过对组设置朗读标签,达到整组播报的效果。

相关权限

不涉及

约束与限制

  1. 本示例仅支持标准系统上运行,支持设备:华为手机。
  2. HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。
  3. DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。
  4. HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值