读屏器是安卓上的一种无障碍应用,方便更多人使用安卓手机。它使用的是系统TTS,需下载语音包。如果没有Talkback,也可以自行安装。
具体操作可以看这个视频:盲人怎么用手机?如何打造视障友善的app?基本操作就是点读,左右滑动切换焦点,上下滑动切换焦点粒度(控件,段落,字词等),双击等于点击,还有双击加长按,双击加长按加拖动等等。
可以读出webview内容。但是中英文混读的效果不是很好。双指滑动可滚动列表,滚动的时候会有一种好听的电子音效。
视图只要保证这两点,就可以被读屏器点读:
排除:
view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
手动发起朗读:
v.announceForAccessibility("朗读内容");
设置顺序(类似于优先级,但是会改变前后切换的顺序)
view.setAccessibilityTraversalAfter(R.id.etSearch);
中断朗读
((AccessibilityManager) view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE)).interrupt();
获取无障碍运行状态
accessMan.isEnabled()
drawerLayout.addDrawerListener(new DrawerListener() {
@Override
public void onDrawerOpened(@NonNull View v) {
drawerOpen = true;
v.announceForAccessibility("抽屉已打开");
}
@Override public void onDrawerClosed(@NonNull View v) {
if (drawerOpen) {
drawerOpen = false;
v.announceForAccessibility("抽屉已关闭");
}
}
@Override
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(event);
event.getText().add(text);
}
参考文档
有些按钮可能需要根据情况提供不同的读屏内容,建议用委托类实现,不用总是自定义视图。
view.setAccessibilityDelegate(new View.AccessibilityDelegate(){
@Override
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
host.setContentDescription("text"); // workaround
super.onPopulateAccessibilityEvent(host, event);
// event.getText().add(text); // 测试无效
}
});