跳到主要内容

禁用屏幕朗读焦点的场景

设计场景

装饰性的控件一般为分隔符、占位符和美化图标等,这类图形元素仅仅起到调整页面布局或装饰性效果,并不会向用户传达有效的信息或提供交互功能,删除后不影响指引用户体验。可以设置控件的无障碍组accessibilityGroup、无障碍重要性accessibilityLevel、组件可见性visibility等属性将其设置为无障碍不可聚焦,这样在屏幕朗读模式下控件就不会获取焦点和朗读。

通过以下无障碍属性可以改变控件可聚焦属性:

  • accessibilityGroup(true) 用于多个组件的组合,拼接所有子组件text文本并设置到无障碍组节点,除非子组件设置了accessibilityLevel为yes,否则子组件默认一定都不可聚焦。
  • accessibilityLevel("no")用于组件设置不可聚焦,忽略当前组件的文本属性和点击属性。
  • accessibilityLevel("no-hide-descendants")用于组件及其所有子组件设置不可聚焦,忽略当前组件及其所有子组件的文本属性和点击属性。

开发实例

以下代码同时显示“Broadcast”和“No broadcast”消息,但当ScreenReader处于“打开”状态时,message可被聚焦,但message1将不被聚焦。

@Entry
@Component
export struct Rule_2_1_2 {
title: string = 'Rule 2.1.2'
@State message: string = 'Broadcast';
@State message1: string = 'No broadcast';

build() {
NavDestination() {
Column() {
Row() {
Text(this.message)
.fontSize(40)
.fontWeight(FontWeight.Bold)
.fontColor(Color.Blue)
.margin({
left: 40
})
}
.width('100%')
.height('50%')
Row() {
Text(this.message1)
.fontSize(40)
.fontWeight(FontWeight.Bold)
.fontColor(Color.Grey)
.margin({
left: 40
}).accessibilityLevel("no") // use for component
}
//.accessibilityGroup(true)
//.accessibilityLevel("no-hide-descendants") // use for container
// 可以使用这两行代替28行的accessibilityLevel("no")
.width('100%')
.height('50%')
}
.height('100%')
}
.title(this.title)
}
}