在安卓应用设计和开发过程中,设计人员为了界面简洁、有独特的交互方式,可能会为控件设计特殊的操作手势,例如消息列表中单指按住消息向左滑删除消息;系统顶部的通知单指向左滑可以关闭通知等。

这些操作对于普通用户非常方便,但是此种操作方式没有做特殊支持的话,可能让某些障碍用户无法使用此功能。如果是一名通过屏幕阅读器使用应用的视障用户,他们就很难借助屏幕阅读器完成此操作。

此时,应该像原生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的自定义操作菜单:

点击操作菜单的执行结果:

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

view类不响应自定义消息_安卓平台如何给控件添加自定义操作?相关推荐

  1. 安卓listview item内部控件操作方法

    自定义listview使用司空见惯,很多时候需要对listview中某一行的内部控件进行操作,加载动画等.本文就如何获取内部空间进行操作简述一下方法. 第一种方法,通过listview的getchil ...

  2. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)

    场景 需求是在窗体加载完成后掉用工具类的方法,工具类中获取窗体的多个控件对象进行赋值. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 ...

  3. ViewPager的使用及获取子view控件的操作(inflate)

    Step 1: 布局文件中添加viewpager和切换页面button <span style="font-size:18px;"><RelativeLayout ...

  4. 覆盖5大主流开发平台的报表控件,它值得你一看

    为什么大家现在都在使用第三方报表工具呢? 第三方报表工具是数据库存储,数据库程序通常可以存放的数据量是相当大的,可以处理非常复杂的数据结构关系,报表数据交互速度也非常快.不仅能够提高开发效率,还能实现 ...

  5. SNF开发平台WinForm-Grid表格控件大全

    我们在开发系统时,会有很多种控件进行展示,甚至有一些为了方便的一些特殊需求. 那么下面就介绍一些我们在表格控件里常用的方便的控件:   1.Grid表格查询条 Grid表格下拉 3.Grid表格弹框选 ...

  6. 银弹谷DevSuite零代码开发平台普通窗体控件描述

    零代码开发平台普通窗体控件描述 1.字段控件 2.业务控件 3.通用控件

  7. AndroidStudio_安卓原生开发_精美自定义多选控件_多选Spinner_MultiSpinner_拿来即用---Android原生开发工作笔记144

    1.首先去定义该控件:MPopListView package com.maddox.mmrrr1;import android.app.AlertDialog; import android.con ...

  8. 安卓java代码写控件_安卓自定义流程进度图控件实例代码

    先上效果图: 如图,可实现设置:总流程数.已完进度程数.已完成颜色,各个标题 使用方法 1.导入compile 'com.github.pavlospt:circleview:1.3'依赖包(因为用到 ...

  9. 微信小程序view动态长度_微信小程序 关于控件尺寸动态计算的问题

    自定义相机界面,顶部80rpx,底部210rpx,中间剩余高度填充相机视频流view. 实现思路是获取屏幕高度,减去顶部80rpx再减去底部210rpx,结果赋值给相机视频流view的高度.这个高度需 ...

最新文章

  1. 每天2小时,吃透 985博士总结的这套保姆级TensorFlow + PyTorch笔记(20G高清/PPT/代码)...
  2. 如何通过人工智能“避开”内容安全的“坑”?
  3. linux中facl有什么作用,在Linux中使用setfacl后权限被拒绝
  4. python关闭浏览器删除session_Django操作session 的方法
  5. 程序员九重镜界,很老的今天刚刚翻出来
  6. java单元格合并多列_ElementUI表格列相同值自动合并单元格( 多列 )
  7. c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
  8. android 中自定义键盘,【图片】自定义属于自己的专属键盘的思路!!!(需要有android编程基础)【exagear吧】_百度贴吧...
  9. ubuntu安装python_常用linux指令 ubuntu环境pytorch配置
  10. mysql的时间在cmd的输入格式_获取“System.FormatException:输入字符串的格式不正确。”在日期时间对象插入到MySql数据库...
  11. 年中618会声会影好礼送不停!
  12. openai-gpt_GPT-3 101:简介
  13. ad如何设置pcb板子形状_板子的造型_ad09在做PCB时如何设计板子的形状啊_彩妆阁...
  14. 第三方验收测试-功能测试方案
  15. 雷达动画在地图显示_本周在我们的雷达上:RebeccaPurple,动画等!
  16. 锅圈食汇:火锅食材超市先行者 正离“火锅“越来越远
  17. 斗牛java主程序设计_Java swing中制作斗牛游戏如何牛点
  18. 头歌-信息安全技术-Linux之用户管理
  19. 实战linux内核精简
  20. 浅谈Asterisk的呼叫转接功能

热门文章

  1. 计算机网络重要机制(一)可靠数据传输
  2. Java获取本地ip方法_Java获取本地IP方法详解
  3. javascript优先级注意点
  4. [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露
  5. 由object元素引出的事件注册问题和层级显示问题
  6. 转:linux中fork()函数详解
  7. 【BZOJ3677】[Apio2014]连珠线 换根DP
  8. Vijos——T 1629 八
  9. UI Automation 简介
  10. Swift的笔记和参考