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

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

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

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


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

  1. setFocusable(true)
  2. 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); // 测试无效
		}
	});

你可能感兴趣的:(安卓开发学习笔记,android)