安卓Accessibility(Talkback无障碍读屏器)适配笔记

读屏器是安卓上的一种无障碍应用,方便更多人使用安卓手机。它使用的是系统TTS,需下载语音包。如果没有Talkback,也可以自行安装。

具体操作可以看这个视频:盲人怎么用手机?如何打造视障友善的app?基本操作就是点读,左右滑动切换焦点,上下滑动切换焦点粒度(控件,段落,字词等),双击等于点击,还有双击加长按,双击加长按加拖动等等。

可以读出webview内容。但是中英文混读的效果不是很好。双指滑动可滚动列表,滚动的时候会有一种好听的电子音效。

视图只要保证这两点,就可以被读屏器点读:

setFocusable(true)setContentDescription(“读屏内容”)

排除:

view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);

手动发起朗读:

v.announceForAccessibility("朗读内容");

其他方法:

设置顺序(类似于优先级,但是会改变前后切换的顺序)

view.setAccessibilityTraversalAfter(R.id.etSearch);

中断朗读

((AccessibilityManager) view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE)).interrupt();

获取无障碍运行状态

accessMan.isEnabled()

so easy…

适配侧滑抽屉:

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); // 测试无效

}

});