跳到主要内容
Version: Next

AccessibilityInfo

有时我们需要知道设备当前是否启用了读屏器。AccessibilityInfo API 就是为此而设计的。你可以用它查询读屏器当前状态,也可以监听状态变化事件。

示例


参考

方法

addEventListener()

tsx
static addEventListener(
eventName: AccessibilityChangeEventName | AccessibilityAnnouncementEventName,
handler: (
event: AccessibilityChangeEvent | AccessibilityAnnouncementFinishedEvent,
) => void,
): EmitterSubscription;

添加事件处理函数。支持的事件如下:

事件名说明
accessibilityServiceChanged
Android
当 TalkBack、其他 Android 辅助技术或第三方无障碍服务被启用时触发。处理函数参数为布尔值:当任一无障碍服务启用时为 true,否则为 false
announcementFinished
iOS
当读屏器完成播报时触发。处理函数参数是一个对象,包含:
  • announcement:读屏器播报的文本。
  • success:是否成功播报的布尔值。
boldTextChanged
iOS
当“粗体文本”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false
grayscaleChanged
iOS
当“灰度”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false
invertColorsChanged
iOS
当“反转颜色”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false
reduceMotionChanged当“减少动态效果”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。(在 Android 上,“开发者选项”中的“过渡动画比例”设为“动画关闭”也会返回 true。)
reduceTransparencyChanged
iOS
当“降低透明度”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false
screenReaderChanged当读屏器状态变化时触发。参数为布尔值:启用为 true,否则为 false

announceForAccessibility()

tsx
static announceForAccessibility(announcement: string);

发送一段字符串,让读屏器播报。


announceForAccessibilityWithOptions()

tsx
static announceForAccessibilityWithOptions(
announcement: string,
options: {queue?: boolean},
);

发送一段字符串让读屏器播报,并可附带选项。默认会打断当前播报;在 iOS 上可通过将 queue 设为 true,把新播报排队到当前播报之后。

参数:

名称类型说明
announcement
Required
string要播报的字符串
options
Required
objectqueue - 是否排队到当前播报之后
iOS

getRecommendedTimeoutMillis()
Android

tsx
static getRecommendedTimeoutMillis(originalTimeout: number): Promise<number>;

获取用户建议的超时时长(毫秒)。 该值来自“辅助功能”设置中的“执行操作所需时间(辅助功能超时)”。

参数:

名称类型说明
originalTimeout
Required
number当“辅助功能超时”未设置时返回的超时值(毫秒)。

isAccessibilityServiceEnabled()
Android

tsx
static isAccessibilityServiceEnabled(): Promise<boolean>;

检查是否启用了任意无障碍服务。它不仅包含 TalkBack,也包括已安装的第三方无障碍应用。若只检查 TalkBack,请使用 isScreenReaderEnabled。 返回 Promise,解析为布尔值:有无障碍服务启用时为 true,否则为 false

note

如果你只想检查 TalkBack 状态,请使用 isScreenReaderEnabled


isBoldTextEnabled()
iOS

tsx
static isBoldTextEnabled(): Promise<boolean>:

查询是否启用了粗体文本。返回 Promise,启用为 true,否则为 false


isGrayscaleEnabled()
iOS

tsx
static isGrayscaleEnabled(): Promise<boolean>;

查询是否启用了灰度显示。返回 Promise,启用为 true,否则为 false


isInvertColorsEnabled()
iOS

tsx
static isInvertColorsEnabled(): Promise<boolean>;

查询是否启用了反转颜色。返回 Promise,启用为 true,否则为 false


isReduceMotionEnabled()

tsx
static isReduceMotionEnabled(): Promise<boolean>;

查询是否启用了减少动态效果。返回 Promise,启用为 true,否则为 false


isReduceTransparencyEnabled()
iOS

tsx
static isReduceTransparencyEnabled(): Promise<boolean>;

查询是否启用了降低透明度。返回 Promise,启用为 true,否则为 false


isScreenReaderEnabled()

tsx
static isScreenReaderEnabled(): Promise<boolean>;

查询是否启用了读屏器。返回 Promise,启用为 true,否则为 false


prefersCrossFadeTransitions()
iOS

tsx
static prefersCrossFadeTransitions(): Promise<boolean>;

查询是否同时启用了“减少动态效果”与“偏好交叉淡入淡出过渡”。返回 Promise,启用为 true,否则为 false


setAccessibilityFocus()

tsx
static setAccessibilityFocus(reactTag: number);

将无障碍焦点设置到某个 React 组件。

在 Android 上,它会调用 UIManager.sendAccessibilityEvent,并传入 reactTagUIManager.AccessibilityEventTypes.typeViewFocused

note

确保希望接收无障碍焦点的 View 设置了 accessible={true}