2016-02-26 60 views
3

我有一个SwitchCompat切换与文本(HQ/LQ为不同品质的流)。 对于视力良好的用户,我认为这显然意味着什么。 但我有问题找到一个很好的解决方案如何使它可访问。安卓切换文本打开/关闭防止从对讲读

我在一般

<android.support.v7.widget.SwitchCompat 
      android:id="@+id/qualitySwitch" 
      style="@style/SwitchStyleCompat" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textOff="LQ" 
      android:textOn="HQ" 
      android:contentDescription="stream quality" 

设置为SwitchCompat一个ContentDescription并希望每次SwitchCompat被触发时设置一个contentDescription。

if (isChecked) { 
streamPlayerService.desireHighQuality(); 
mQualitySwitch.setContentDescription("quality high"); 

} else { 
streamPlayerService.desireLowQuality(); 
mQualitySwitch.setContentDescription("quality low"); 
} 

但即便是contentDescription,纹理基元/ textOff标志也仍然可以通过Talkback产生类似“质量高HQ开关”阅读。有什么办法可以禁用textOn/textOff属性的阅读,这样只有contentDescription被读取给用户?

回答

1

你可以得到你想要的确切行为。但做到这一点的唯一方法是自定义控件,或者一些涉及开关背后的隐形视图的骇客。如果TalkBack遇到交换机,它会按照您所说的方式将其读出。共享状态和价值信息。在你去找一个自定义控件之前,让我给你介绍一下我认为是一个更易于使用的解决方案。同时也鼓励您查看我的开源应用程序,该应用程序处理大量可访问性概念,实际上包含我在此与您分享的方法示例。

https://github.com/dequelabs/Deque-University-for-Android

请记住,可访问任何文本或状态必须以同等的方式共享。您无法将用户听到的内容与他们看到的内容分开。我们不仅关心盲人,而且关心那些只能看到困难的人。如果公告与他们期望的完全不同,它可能会非常混乱。另外,如果公告令人困惑,或许你应该重新考虑对于有视力的用户是否同样困惑......

因此,如果你有一个开/关开关,在通知期间的某个时刻它读取或关闭。这是用户将习惯的用途,对于使用您的控件的用户可能是缺乏用户的用户,如果您要覆盖此行为,则会非常混淆。如果您的控件文本让视力不佳的用户感到困惑,并且您重申了这个确切的文字,那么对于不具视力的用户来说,这将同样令人困惑。实际上,这比为话语提示用户创建单独的用户体验更“容易”。这仅仅意味着您有一个用户体验问题,需要更改标签的措辞。

完成此操作的最佳方法是使用LabelFor属性。

<TextView 
    android:labelFor="@+id/your_id" 
    android:text="My Text" /> 

<ToggleButton android:id="@+id/your_id"/> 

这将导致其阅读过这样的:

HQ,开关,质量高

如果集中在交换机上,这正是你所需要的信息。交换机上的文本是“HQ”,它是一个开关,它与视觉标签“质量高”相关联。状态,角色,名字......连续排列。这是一件美丽的事情!

如果您认为这仍然令人困惑,您也可以向TextView添加内容描述,以便TalkBack用户获得一些额外的上下文,尽管它应该非常类似于实际的文本。 (EX:包含实际的文本,附加信息,或者做一些缩略词扩展)。

<TextView 
    android:labelFor="@+id/my_id" 
    android:text="Quality High" 
    android:contentDescription="... Quality High ..." /> 

<ToggleButton android:id="@+id/my_id"/> 

这将导致内容描述被读出,因此这样的,而不是读客:

HQ,开关...质量高...

或者像这样:

<TextView 
    android:labelFor="@+id/my_id" 
    android:text="A misleading acronym CA" 
    android:contentDescription="A misleading acronym Certificate Authority" /> 

<ToggleButton android:id="@+id/my_id"/> 
+0

非常感谢你这个彻底的答案,我会尽快尝试:) – Eve