2017-10-20 83 views
0

您将如何通过Android上的TalkBack(或iOS等效)宣布可访问性消息?现有的ReactNative版本有可能吗?我只是无法找到任何信息,似乎相当有限,尤其是对于Android客户端(例如,“按钮”,“单选按钮被选中/未选中”)是我可以看到的任何视图的唯一两个状态如何让React-Native通过AccessibiliyManager发布特定的辅助功能消息?

想知道if这是可能的ootb,还是我需要创建一个桥,揭露这从本机?

回答

1

我结束了创建一个辅助功能模块(目前只适用于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"); 
1

@DustinB你可以使用这个库我写道:

https://github.com/MaxToyberman/react-native-accessibility

遵循此步骤:

1)NPM安装反应天然-无障碍--save

2)反应的天然链路反应天然-无障碍

3)进口{announceForAccessibility}从 '反应天然-无障碍'

4)announceForAccessibility('将要发布的消息')

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17919121) – Robert

+0

@Robert我已经更新了我的答案。 –