- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 SwitchCompat
作为带有文本的开关(HQ/LQ 用于不同质量的流)。对于视力好的用户,我认为这意味着什么是显而易见的。但是我很难找到一个好的解决方案来使其易于访问。
我一般为 SwitchCompat
设置了 ContentDescription
<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。
if (isChecked) {
streamPlayerService.desireHighQuality();
mQualitySwitch.setContentDescription("quality high");
} else {
streamPlayerService.desireLowQuality();
mQualitySwitch.setContentDescription("quality low");
}
但即使有 contentDescription,textOn/textOff 标志仍会被 Talkback
读取,从而导致类似“Quality high HQ switch”的结果。有什么方法可以禁止读取 textOn/textOff 属性,以便只向用户读取 contentDescription?
最佳答案
您可以获得所需的确切行为。但唯一的方法是自定义控件,或者一些涉及开关背后不可见 View 的黑客行为。如果 TalkBack 遇到一个开关,它会按照你说的方式读出来。共享状态和值(value)信息。在您开始组装自定义控件之前,让我向您展示我认为更易于访问的解决方案。也鼓励您查看我的开源应用程序,它涉及很多无障碍概念,实际上包含我在这里与您分享的方法示例。
https://github.com/dequelabs/Deque-University-for-Android
请记住,对于可访问性,任何文本或状态都必须以等效方式共享。您无法将用户听到的内容与他们看到的内容分开。我们不仅关心盲人,还关心那些可能只是视力有困难的人。如果公告与他们的预期完全不同,可能会非常困惑。此外,如果该公告令人困惑,也许您应该重新考虑它是否对有视力的用户同样令人困惑...
因此,如果您有一个开/关开关,则在公告期间的某个时间点打开或关闭它是合适的。这是用户将习惯的,并且对于使用您的控件的阅读障碍用户来说,如果您要覆盖此行为,他们会非常困惑。如果您的控件文本让有视力的用户感到困惑,并且您重复了这个确切的文本,那么对于没有视力的用户来说同样会造成混淆。这实际上比为 TalkBack 用户创建单独的用户体验更“易于访问”。因为这只是意味着您遇到了用户体验问题,需要更改标签的措辞。
实现此目的的最佳方法是使用 LabelFor 属性。
<TextView
android:labelFor="@+id/your_id"
android:text="My Text" />
<ToggleButton android:id="@+id/your_id"/>
这将导致它像这样读取:
HQ, switch, for Quality High
如果您专注于开关,这正是您需要的信息。开关上的文字是“HQ”,这是一个开关,它与视觉标签“质量高”相关联。状态、角色、名称……接二连三。这是一件美丽的事情!
如果您认为这仍然令人困惑,您还可以向 TextView 添加内容描述,以便 TalkBack 用户获得一些额外的上下文,尽管它应该与实际文本非常相似。 (例如:包含实际文本,附加信息,或者可能做一些首字母缩略词扩展)。
<TextView
android:labelFor="@+id/my_id"
android:text="Quality High"
android:contentDescription="... Quality High ..." />
<ToggleButton android:id="@+id/my_id"/>
这将导致内容描述被读出,因此它会像这样读出:
HQ, switch for ... Quality High ...
或者像这样:
<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"/>
关于Android 切换 textOn/Off 防止从 Talkback 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655156/
正如标题所说,Android Talkback 没有注册 onFocus 事件。我知道 onFocus 事件从未注册过,因为屏幕阅读器使用的是特殊类型的 accessibility focus .那么
我正在努力使我的 View 更易于访问。我希望对讲在焦点转移到 View 时宣布 Double tap to Apply 而不是 Double tap to Activate。我正在做这样的事情:
有没有办法以编程方式设置在触发某些操作(例如按钮单击)时读取对讲的所有 View ,就像您一次用 3 个手指点击时一样? 提前致谢。 最佳答案 选项 1 - 如果您只想阅读一些文本:使用语音转文本 请
这让我抓狂,我不知道如何自定义“用两根手指滑动以更改页面”的操作。如果我想在“双击”之后进行一些自定义,我已经可以使用它了,所以我很确定我在正确的轨道上。但是我尝试过的每种 Action 类型似乎都不
当 TextView 包含 foo bar 04:58 时,TalkBack 会说 foo bar 4 hours 58 minutes - 它应该是 foo bar 4 minutes 58 sec
我有一个包含笔记列表的对话框,我想让用户滚动到列表的末尾以找到“确定”按钮以关闭对话框。 对话框包含一个 ListView,我使用页脚行将按钮添加到列表中。 View footerView = ((L
我正在开发 Angular 2 网络应用程序,并使用 TalkBack 屏幕阅读器测试 Android 上的辅助功能问题。 在主要内容 block 中向右滑动会按预期工作,直到我到达屏幕底部。当我以相
我试图掌握如何在头脑中使用屏幕阅读器进行编码,但我遇到了很多问题。第一个示例是我尝试显示的单个 HTML 元素: This is an element. Android 上的 Talkback 会将其
我的应用程序中有一个透明 View 位于几个 fragment 之上。因此,我的 fragment 位于透明覆盖层下方,但在打开覆盖层时用户无法访问它们,因为触摸覆盖层会将其关闭。在我启用 TalkB
我的应用程序使用TTS(文本到语音)引擎,我遇到的冲突是可访问性Talkback 设置覆盖了TTS 试图说的任何内容。如果使用我的应用程序,我想禁用电话的对讲选项。 是否有某种许可来处理这个?我找不到
我正在为应用程序实现“大声朗读”或“Talkback”。一切都在使用 contentDescription 文本,但在选项菜单中,我找不到与 contentDescription 相关的任何内容,我希
我有一个双语(英语 + 西类牙语)android 应用程序。我正在我的应用程序中实现可访问性,我希望 Talkback 以西类牙语阅读西类牙语单词,以英语阅读英语单词。英语和西类牙语单词将位于单独的
在上图中,您可以看到 TalkBack 选择了一个完全被遮挡的标签。如果我再次点击,那么顶部的整个面板将被选中(它被设置为可聚焦),这是所需的行为。 如何防止 TalkBack 选择完整(或部分)被遮
我将标题添加到 ListView。 header 有几个组件(按钮、TextView、RelativeLayouts)。当打开对讲并选择标题时,将读取整个标题,您无法选择单个组件。虽然,按钮是可选的,
我在 TextView 下方有一个水平回收 View (最近的项目在最右边,最旧的项目在最左边)。一旦可访问性控件到达 textview,向右滑动时它会聚焦在回收器 View 的最左边的项目(即第一项
我的 Android 应用创建了一个通知。通知已正确显示。但是,TalkBack 不会宣布通知,例如,当我收到新电子邮件时。如果我显示所有通知并滚动浏览它们,TalkBack 将朗读我的通知文本。但是
有谁知道为什么 TalkBack 将文本“Balance: $0.00”读作简单的“Balance”?它似乎忽略了等于零的值。我希望它被解读为“余额:零美元”。 view.announceForAcc
假设我有一个非常棒的应用程序,并且因为它是一个很棒的应用程序,所以它必须有一个 Web2.0 名称,所以我们将它命名为 iFygs(完全虚构,抱歉,如果有人实际上在某个地方有这个应用程序)。我想保持我
我正在使用带有多个 TextView 和 LinearLayout 的线性布局。示例屏幕: 每当我访问该屏幕时,TalkBack
问题是当我的 Activity 启动时,我正在使用 TTS 读取长字符串消息,但 TalkBack 会自动读取中间的应用程序名称并截断长字符串,这非常烦人。 我想在每次启动 Activity 时禁用
我是一名优秀的程序员,十分优秀!