在关注时禁用视图通知(启用对讲)

时间:2017-05-20 22:21:58

标签: android talkback android-accessibility

我在我的textview中使用自定义动态内容描述,因此它已在我的java类中实现,而不是在我的xml文件中实现。

private void enableButton(TextView textView, boolean enabled) {
    if (textView == null) {
        return;
    }
        if (!enabled) {
            textView.setContentDescription(textView.getResources().getString(R.string.install_disabled));
        } else {
            textView.setContentDescription(textView.getResources().getString(R.string.install));
        }
    textView.setEnabled(enabled);
}

在我启用textview后可以点击,并且启用对讲后,专注于我的textview会宣布我的textview的状态是" 已禁用&#34 ;。有没有办法不宣布这个州?

我不想将可访问性设置为不重要,因为当对讲用户专注于textview时,我仍然希望我的动态contentDescription被列出。

建议: 我相信罪魁祸首是" setEnabled"以某种方式触发和宣布textview状态的方法,但我仍然无法阻止它背诵最后一次。

2 个答案:

答案 0 :(得分:0)

我的第一个答案是:独自离开! “禁用”通知告诉TalkBack用户那里有用户界面控件,在某些情况下可以与之交互但当前不活动。根据您的描述,这正是您所拥有的。要删除公告实际上是从可访问性的角度来看事情的原因,WCAG 1.3.1中介绍了为什么会出现这种情况的解释。

定义:

Button = android.widget.Button

button =用户界面组件,当您单击它时会执行某些操作。

Text =用于传达信息但未激活的用户界面组件

长话短说,控件永远处于活动状态且“未禁用”的状态本身就是重要信息,应该与用户共享。特别是因为您正在使用“TextView”来实现这一点。这不是一个非常罕见的做法,但是TalkBack计算角色(按钮,链接,图像,文本等)的方法之一是查看对象的类/类型。因此,当它看到TextView时,它将采用Text,除非您另行通知。现在,既然你已经为你的TextView(或手势识别器或其他任何东西)添加了点击监听器,那么TalkBack可能会发现你正在处理的东西实际上是一个“按钮”,而它可能没有。无论如何,这个“按钮”(小写字母B!)未激活的事实是与用户共享的重要状态,并向他们传达这样的事实:他们可以某种方式启用它并稍后返回并与之交互。这是非常重要的信息!想象一下,如果WebPage上的每个按钮/链接看起来都像平面文本一样?你怎么知道要与之互动?

现在,我将向您展示这个难题的不同部分,作为信息,但我确实鼓励您单独留下声明。这是来自那些经常在本地Android开发的无障碍会议上发言的人,请留下本公告。如果不这样做,则会误解视障人士如何在应用程序中感知控件,以及对他们重要的信息。

TextView上的setEnabled()函数直接与isEnabled()的{​​{1}}属性对应。

为了实现您想要的行为,您希望TextView的AccessibilityNodeInfo表示形式与TextView的实际表示形式不同。为了做到这一点,您可以使用AccessibilityNodeInfo,我实际上不确定您要使用哪个回调。在其中一个节点中,节点很可能被“密封”,其中一个节点可能尚未密封。你显然想要节点尚未密封的那个!无论一般方法是什么:

AccessibilityDelegate

答案 1 :(得分:0)

setClickable(false)代替setEnabled(false)可以解决这个问题。