目录

序言

1.添加自定义操作

2.响应自定义操作

实现结果


序言

在安卓应用设计和开发过程中,设计人员为了界面简洁、有独特的交互方式,可能会为控件设计特殊的操作手势,例如消息列表中单指按住消息向左滑删除消息;系统顶部的通知单指向左滑可以关闭通知等。这些操作对于普通用户非常方便,但是此种操作方式没有做特殊支持的话,可能让某些障碍用户无法使用此功能。如果是一名通过屏幕阅读器使用应用的视障用户,他们就很难借助屏幕阅读器完成此操作。此时,应该向原声Android系统中的通知一样给控件添加自定义操作提示和操作支持。下面说说具体的实现步骤:

 

1.添加自定义操作

重写View类的onInitializeAccessibilityNodeInfo()方法(如果是标准控件,可以通过无障碍代理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朗读自定义提示

android 自定义键值 安卓自定义操作_自定义

下面的截图是TalkBack的自定义操作菜单

android 自定义键值 安卓自定义操作_自定义_02

点击操作菜单的执行结果如下

android 自定义键值 安卓自定义操作_android 自定义键值_03

 

简单的两部处理就能让你的应用更方便屏幕阅读器用户使用,块看看你的应用中哪里可以使用此技巧吧!花点儿时间应用上此方法,让你的应用更加高大上。