在安卓应用设计和开发过程中,设计人员为了界面简洁、有独特的交互方式,可能会为控件设计特殊的操作手势,例如消息列表中单指按住消息向左滑删除消息;系统顶部的通知单指向左滑可以关闭通知等。
这些操作对于普通用户非常方便,但是此种操作方式没有做特殊支持的话,可能让某些障碍用户无法使用此功能。如果是一名通过屏幕阅读器使用应用的视障用户,他们就很难借助屏幕阅读器完成此操作。
此时,应该像原生Android系统中的通知一样给控件添加自定义操作提示和操作支持。
1、添加自定义操作
重写View类OnInitialzeAccessibilityNodeInfo()的方法:
如果是标准控件,可以通过无障碍代理View.AccessibilityDelegate重写此方法。
在此方法中首先调用父类的实现,然后调用AccessibilityNodeInfo对象的addAction方法添加自定义的事件。
注意:
1.这里添加的自定义事件的事件ID必须大于16进制的0x01ffffff,因为0x01ffffff本身以及小于此值都是系统定义的事件的ID。
2.自定义事件必须提供事件描述文本,不提供描述文本无障碍服务将无法提示和获取到此事件。下面是样例代码:
@Override
protected void onInitialzeAccessibilityNodeInfo(AccessibilityNodeInfo info){
//调用父类实现
super.onInitializeAccessibilityNodeInfo(info);
//设置自定义事件
node.addAction(new AccessibilityAction(0x02000000, "菜单1"));
node.addAction(new AccessibilityAction(0x02fffffe, "菜单2"));
}
2、响应自定义操作
添加了自定义操作事件之后,还需要处理用户的自定义操作,这样用户在通过无障碍服务操作这些自定义事件时,才能得到正确的响应结果。重写performAccessibilityAction()方法,在此方法中响应对应的事件ID的操作。如下面样例代码所示:
//返回true表示此方法已经处理完事件,返回false表示事件未处理完
@Override
Protected boolean performAccessibilityAction(int action, Bundle data) {
Switch (action) {
Case 0x02000000: //菜单1的处理,这里简单的弹出提示信息
Toast.makeText(context, “你点击了菜单1”, Toast.LENGTH_SHORT).show();
Return true;
Case 0x02fffffe: //菜单2的点击处理
Toast.makeText(context, “你点击了菜单2”, Toast.LENGTH_SHORT).show();
Return true;
}
Return false;
}
TalkBack朗读自定义提示:
TalkBack的自定义操作菜单:
点击操作菜单的执行结果:
简单的两步处理就能让你的应用更方便屏幕阅读器用户使用,快看看你的应用中哪里可以使用此技巧吧!花点儿时间应用上此方法,让你的应用更加高大上。