文档管理中心

多UI控件组合

设计场景

在一些场景中,一个功能上完整的UI对象可能是由若干个更小的UI组件组合而成的。若每一个小的UI组件都可以获焦并朗读,则会造成信息冗余和效率降低。同时由于可聚焦的组件过多过细,也会影响触摸浏览时走焦的性能体验。在这种情况下,将它们在功能或语义上聚合成一个自然组并作为一个独立可获焦的UI元素来向视障用户表达内容更加合理,且更加高效。总体原则是:对于表示同一个对象信息的多个组件,需要进行组合标注,对外只暴露一个无障碍焦点。

开发流程

如下,可以将多个控件设置为一个组,通过对组设置朗读标签,达到整组播报的效果,组内的子控件设置不可获取焦点。

收起
自动换行
深色代码主题
复制
  1. @Entry
  2. @Component
  3. export struct Rule_2_1_4 {
  4. title: string = 'Rule 2.1.4';
  5. build() {
  6. NavDestination() {
  7. Column() {
  8. Row() {
  9. // 默认只有子组件才能获取焦点。
  10. // 日期、天气、温度等信息在每个组件独立获取焦点时分别朗读。
  11. // 在组合式组件规范里是不正确的。
  12. Text('23 Dec 2023') // 日期信息,组件可独立对焦和朗读。
  13. .fontSize(32)
  14. .fontColor(Color.Red)
  15. .fontWeight(FontWeight.Bold)
  16. .textAlign(TextAlign.Center)
  17. .margin({ right: 20 })
  18. Column() // 天气信息,组件可独立对焦和朗读。
  19. .backgroundColor(Color.Blue)
  20. .width(50)
  21. .height(50)
  22. .accessibilityText('Snow') // 当该组件被屏幕阅读器选中时,该组件不包含文本信息,因此将读取此文本。
  23. .margin({ right: 20 })
  24. Text('-1') // 温度信息,组件可独立对焦和朗读。
  25. .fontSize(20)
  26. .fontColor(Color.Green)
  27. .fontWeight(FontWeight.Bold)
  28. .textAlign(TextAlign.Center)
  29. }
  30. .height(50)
  31. .margin({ bottom: 20 })
  32. Row() {
  33. // 因为accessibilityGroup属性设置为true,子组件无法获取焦点。
  34. // 获取焦点时,日期、天气、温度信息一起朗读。
  35. // 此时只有Row可以获取焦点,这是符合组合式组件规范的。
  36. Text('24 Dec 2023') // 日期信息,组件无法聚焦,无法朗读,因为父组件的accessibilityGroup属性设置为true。
  37. .fontSize(32)
  38. .fontColor(Color.Red)
  39. .fontWeight(FontWeight.Bold)
  40. .textAlign(TextAlign.Center)
  41. .margin({ right: 20 })
  42. Column() // 天气信息组件无法聚焦,无法朗读,因为父组件的accessibilityGroup为true。
  43. .backgroundColor(Color.Yellow)
  44. .width(50)
  45. .height(50)
  46. .accessibilityText('Sunny') // 组件不包含文本信息,当组件被屏幕阅读器选中时,因此将读取此文本。
  47. .margin({ right: 20 })
  48. Text('-7') // 温度信息,组件无法聚焦,无法朗读因为父组件的accessibilityGroup为true。
  49. .fontSize(20)
  50. .fontColor(Color.Green)
  51. .fontWeight(FontWeight.Bold)
  52. .textAlign(TextAlign.Center)
  53. }
  54. .height(50)
  55. .margin({ bottom: 20 })
  56. .accessibilityGroup(true) // 将accessibilityGroup属性设置为true。
  57. }
  58. .alignItems(HorizontalAlign.Start)
  59. .padding(10)
  60. }
  61. .title(this.title)
  62. }
  63. }
在 指南 中进行搜索
请输入您想要搜索的关键词