在应用程序开发过程中,应用中经常会显示一些可点击的文本
这些可点击的文本,用户点击之后可以跳转到相关的界面或执行相关的操作
例如,在应用启动时出现的同意协议界面,经常会看到类似这样的文字:
“请充分阅读并理解用户协议和隐私政策,点击同意按钮表示你认可这些协议。”
文字中的“用户协议”和“隐私政策”是可点击的
点击之后会跳转到协议详情界面
再如,一个详情界面可能会显示这样的文本:
“如有任何疑问请拨打电话:13988888888”“详细信息可访问http://www.xxxx.com查看”
这里的号码和网址点击之后可以打开电话和显示网页内容
微信发群红包时的可点击文本
视觉上看起来清楚明了,操作起来也非常容易
但是如果没有设计到位的话,屏幕阅读器用户无法点击这些文本
这是由于屏幕阅读器在访问控件时,只能聚焦整个文本,而不能聚焦内部可点击的文本导致的
屏幕阅读器用户也不用沮丧,安卓的设计人员为TalkBack(安卓系统内置的屏幕阅读器)添加了上下文菜单功能,其中的“链接”子菜单完全能解决此问题。
首先,说一下如何通过TalkBack点击可点击的文本
使用触摸浏览(直接触摸控件)或线性浏览(单指左右扫动)访问到有可点击文本的控件
然后单指先向上再向右,在屏幕上画一个朝向右边的“7”的形状,会弹出上下文菜单
然后点击“链接”菜单,你就可以选择你要打开的链接了
温馨提示:如果此控件没有做正确的无障碍支持,上下文菜单中是没有“链接”菜单出现的哦!
现在我们来谈谈,如何正确的让可点击的文本支持无障碍操作
如果控件中只是电话号码、邮件地址、网址、地图坐标等要支持点击和无障碍的话,很简单
只需要使用文本控件的android:autoLink属性
此属性中可以指定可点击的类型
例如网址为”web”、邮件为”email”,
如果想支持所有类型可以使用”all”
下面的文本框指定一个网址区域可点击的效果:
<TextViewandroid:layout_width="wrap_content"android:text="官网是 http://www. ytwza.com "android:layout_height="wrap_content"android:autoLink="web"/>
那么,如果不是网址、电话、邮件地址仅是单纯的文本,如“用户协议”,应该如何进行无障碍支持呢?
普通文本在实现点击效果时要使用Spannable
在使用此类的时候,我们使用URLSpannable这个Spannable类的子类
这个子类实现的点击效果能无障碍的支持。
下面是样例代码:
TextView text = (TextView) findViewById(R.id.text2); SpannableString ss = new SpannableString("打电话,发短信,发邮件,看官网"); ss.setSpan(new URLSpan("tel:13899887898"), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new URLSpan("smsto:13988789878"), 4, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new URLSpan("mailto:abc@qq.com"), 9, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new URLSpan(" http://www. ytwza.com "), 13, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); text.setText(ss);text.setMovementMethod(LinkMovementMethod.getInstance());
如果要自定义Spannable请继承URLSpannable或使用Linkify类。
其实让可点击的文本支持无障碍非常简单,只需要开发在实现的时候注意使用的类,就可以让视障用户顺畅的使用你的应用
快看看你的应用是否有此类问题吧!
如果有,花几分钟解决它吧!