AccessibilityInfo
有时我们需要知道设备当前是否启用了读屏器。AccessibilityInfo API 就是为此而设计的。你可以用它查询读屏器当前状态,也可以监听状态变化事件。
示例
参考
方法
addEventListener()
static addEventListener(
eventName: AccessibilityChangeEventName | AccessibilityAnnouncementEventName,
handler: (
event: AccessibilityChangeEvent | AccessibilityAnnouncementFinishedEvent,
) => void,
): EmitterSubscription;
添加事件处理函数。支持的事件如下:
| 事件名 | 说明 |
|---|---|
accessibilityServiceChangedAndroid | 当 TalkBack、其他 Android 辅助技术或第三方无障碍服务被启用时触发。处理函数参数为布尔值:当任一无障碍服务启用时为 true,否则为 false。 |
announcementFinishediOS | 当读屏器完成播报时触发。处理函数参数是一个对象,包含:
|
boldTextChangediOS | 当“粗体文本”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。 |
grayscaleChangediOS | 当“灰度”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。 |
invertColorsChangediOS | 当“反转颜色”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。 |
reduceMotionChanged | 当“减少动态效果”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。(在 Android 上,“开发者选项”中的“过渡动画比例”设为“动画关闭”也会返回 true。) |
reduceTransparencyChangediOS | 当“降低透明度”开关状态变化时触发。参数为布尔值:启用为 true,否则为 false。 |
screenReaderChanged | 当读屏器状态变化时触发。参数为布尔值:启用为 true,否则为 false。 |
announceForAccessibility()
static announceForAccessibility(announcement: string);
发送一段字符串,让读屏器播报。
announceForAccessibilityWithOptions()
static announceForAccessibilityWithOptions(
announcement: string,
options: {queue?: boolean},
);
发送一段字符串让读屏器播报,并可附带选项。默认会打断当前播报;在 iOS 上可通过将 queue 设为 true,把新播报排队到当前播报之后。
参数:
| 名称 | 类型 | 说明 |
|---|---|---|
| announcement Required | string | 要播报的字符串 |
| options Required | object | queue - 是否排队到当前播报之后 iOS |
getRecommendedTimeoutMillis() Android
static getRecommendedTimeoutMillis(originalTimeout: number): Promise<number>;
获取用户建议的超时时长(毫秒)。 该值来自“辅助功能”设置中的“执行操作所需时间(辅助功能超时)”。
参数:
| 名称 | 类型 | 说明 |
|---|---|---|
| originalTimeout Required | number | 当“辅助功能超时”未设置时返回的超时值(毫秒)。 |
isAccessibilityServiceEnabled() Android
static isAccessibilityServiceEnabled(): Promise<boolean>;
检查是否启用了任意无障碍服务。它不仅包含 TalkBack,也包括已安装的第三方无障碍应用。若只检查 TalkBack,请使用 isScreenReaderEnabled。
返回 Promise,解析为布尔值:有无障碍服务启用时为 true,否则为 false。
如果你只想检查 TalkBack 状态,请使用 isScreenReaderEnabled。
isBoldTextEnabled() iOS
static isBoldTextEnabled(): Promise<boolean>:
查询是否启用了粗体文本。返回 Promise,启用为 true,否则为 false。
isGrayscaleEnabled() iOS
static isGrayscaleEnabled(): Promise<boolean>;
查询是否启用了灰度显示。返回 Promise,启用为 true,否则为 false。
isInvertColorsEnabled() iOS
static isInvertColorsEnabled(): Promise<boolean>;
查询是否启用了反转颜色。返回 Promise,启用为 true,否则为 false。
isReduceMotionEnabled()
static isReduceMotionEnabled(): Promise<boolean>;
查询是否启用了减少动态效果。返回 Promise,启用为 true,否则为 false。
isReduceTransparencyEnabled() iOS
static isReduceTransparencyEnabled(): Promise<boolean>;
查询是否启用了降低透明度。返回 Promise,启用为 true,否则为 false。
isScreenReaderEnabled()
static isScreenReaderEnabled(): Promise<boolean>;
查询是否启用了读屏器。返回 Promise,启用为 true,否则为 false。
prefersCrossFadeTransitions() iOS
static prefersCrossFadeTransitions(): Promise<boolean>;
查询是否同时启用了“减少动态效果”与“偏好交叉淡入淡出过渡”。返回 Promise,启用为 true,否则为 false。
setAccessibilityFocus()
static setAccessibilityFocus(reactTag: number);
将无障碍焦点设置到某个 React 组件。
在 Android 上,它会调用 UIManager.sendAccessibilityEvent,并传入 reactTag 与 UIManager.AccessibilityEventTypes.typeViewFocused。
确保希望接收无障碍焦点的 View 设置了 accessible={true}。