我们实现了可访问性支持,而无需更改移动应用程序的视觉组件

本文不是一行代码,也不是一个复杂的术语。 我将尝试以一种甚至远离发展的人也能理解的方式进行陈述。

这将与在移动应用程序中实现可访问性(accessibility)有关。

简要背景


最近,我代表Accessible Life项目,开始帮助Yandex实现其导航应用程序的可访问性。

我面临着这样一个事实:从我的角度来看,很多显而易见的事情都没有想到:屏幕上的不可见元素,使用屏幕访问程序的API直接输出语音消息,等等。

因此,我决定在单独的文章中陈述所有这一切。

总的来说,我们走吧。

隐形物品


问题


在处理地图的过程中,我们遇到了一个问题:
当您点击带有地图的屏幕区域时,应用程序应切换模式(我不确定具体的细节)。

对于具有屏幕访问程序的盲人用户来说,这种看似简单的操作变得不可能。

实际上,屏幕访问程序仅“看到”屏幕上的特定对象:按钮,文本块,输入字段,控件和列表。 在Yandex.Maps应用程序中,在地图上的单击不被视为对对象的选择,而被视为对屏幕特定区域的触摸。

解决方案


解决方案非常简单:使屏幕上的按钮没有框架,透明的背景并且没有可见的文本(零字体,从程序员的角度来看在美学上并不令人满意,或者使特殊属性仅显示屏幕访问程序的文本而不在屏幕上显示)。

这种方法使程序员感到震惊和惊讶,但是实际上,所有事情都奏效了,这个想法奏效了,并且在需要处理屏幕区域直接单击的任何地方都积极地引入了这种想法。

使用屏幕访问程序本身直接输出语音消息


问题


另一个问题是,有时需要只为盲人用户显示其他信息。 在这种情况下,弹出消息会破坏设计并干扰其他消息,并且实现单独的应用程序模式来显示此类消息既麻烦又不合逻辑。

解决方案


解决方案不像看不见的按钮那样明显,但它也存在于表面上。
您需要使用屏幕访问程序本身的API来显示消息。 它在程序代码中看起来不那么庞大,它不会迫使开发人员做出额外的努力来创建单独的模式,其他设置等。

顺便说一句,如果您使用屏幕阅读器API,则无需检查它是否已启用。 如果程序正在运行,它将使用用户选择的语音合成器显示一条消息。 如果关闭程序,则什么也不会发生,普通用户也不会注意到。

分享!


问题


这是一个建议,而不是一成不变的做法,但是我不得不提及这一点。

还记得屏幕访问程序的屏幕上只有对象吗?

因此,对象的类型也很重要。 她认为无法单击该文本,但是无法复制该按钮。 也就是说,如果将设置表实现为一个大文本块,该文本块“捕捉”其本身的不同部分,则该表不可用于屏幕访问程序。 它将被读取,但不允许交互。

解决方案


解决方案非常简单:按预期使用元素。

如果应该是列表,则需要使用代码中描述列表的元素;
如果是按钮,则必须是按钮; 如果它是滑块,是某些东西的调节器,则它应该是滑块的元素,而不是拖动时带有动画的文本。

结论


总而言之,我想说Windows的开发虽然不是必需的,但与移动平台的开发不同,因此Windows的可访问性功能不同于Android / Ios的功能。

Source: https://habr.com/ru/post/zh-CN432756/


All Articles