您将如何通过Android上的TalkBack(或iOS等效)宣布可访问性消息?现有的ReactNative版本有可能吗?我只是无法找到任何信息,似乎相当有限,尤其是对于Android客户端(例如,“按钮”,“单选按钮被选中/未选中”)是我可以看到的任何视图的唯一两个状态如何让React-Native通过AccessibiliyManager发布特定的辅助功能消息?
想知道if这是可能的ootb,还是我需要创建一个桥,揭露这从本机?
您将如何通过Android上的TalkBack(或iOS等效)宣布可访问性消息?现有的ReactNative版本有可能吗?我只是无法找到任何信息,似乎相当有限,尤其是对于Android客户端(例如,“按钮”,“单选按钮被选中/未选中”)是我可以看到的任何视图的唯一两个状态如何让React-Native通过AccessibiliyManager发布特定的辅助功能消息?
想知道if这是可能的ootb,还是我需要创建一个桥,揭露这从本机?
我结束了创建一个辅助功能模块(目前只适用于Android,将不得不在iOS上实现相同的功能)。步骤:
创建AccessibilityModule.java:
public class AccessibilityModule extends ReactContextBaseJavaModule {
private final ReactApplicationContext mContext;
public AccessibilityModule(ReactApplicationContext reactContext) {
super(reactContext);
mContext = reactContext;
}
@Override
public String getName() {
return "A11yModule";
}
@ReactMethod
void announce(String message) {
final AccessibilityManager a11yManager = (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
if (a11yManager == null || !a11yManager.isEnabled()) {
return;
}
final int eventType = AccessibilityEventCompat.TYPE_ANNOUNCEMENT;
final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
event.getText().add(message);
event.setClassName(AccessibilityModule.class.getName());
event.setPackageName(mContext.getPackageName());
a11yManager.sendAccessibilityEvent(event);
}
}
然后,在我的ReactPackage类,我注册模块:
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new AccessibilityModule(reactContext));
return modules;
}
然后,进口NativeModules在JavaScript中使用它:
import { NativeModules } from 'react-native'
const A11yModule = NativeModules.A11yModule; // this matches getName()
A11yModule.announce("Hello World");
@DustinB你可以使用这个库我写道:
https://github.com/MaxToyberman/react-native-accessibility
遵循此步骤:
1)NPM安装反应天然-无障碍--save
2)反应的天然链路反应天然-无障碍
3)进口{announceForAccessibility}从 '反应天然-无障碍'
4)announceForAccessibility('将要发布的消息')
尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17919121) – Robert
@Robert我已经更新了我的答案。 –