我向ListView添加标题。标题有几个组件(Buttons,TextViews,RelativeLayouts)。当打开对讲并且选择了标题时,将读取整个标题,您无法选择单个组件。虽然,按钮是可选择的,并且对讲将读取它们。但是文本观点并不是分开的。
如何让对话将标题中的所有组件视为单个组件?
答案 0 :(得分:1)
简单回答:你不能。
TalkBack试图通过收集列表视图单元格中的所有信息(读取:未激活)信息(标题视图仍然是列表视图的一部分)并将其作为一个元素读出来试图变得聪明。这将该单元中的任何信息关联在一起,我相信通过将对象放置在布局中作为重要的可访问性,尽管可能会使用ListView单元的特定逻辑发生一些TalkBack魔术。
例如,如果您的单元格看起来像这样:
Name: Chris
Address: Blah blah blah
Name: Herman
Address: Blarg blarg blarg
每个单元格都会读出来:
Name: Chris Adress Blah Blah Blah
这是有益的,因为没有排序/数据关联问题。如果数据没有包装在一起怎么办? " Blah Blah Blah"地址属于克里斯(前面的名字),还是赫尔曼(后面的名字)?在该等式中忽略有源元件,因为有源元件需要......良好有效。因此必须是可单独聚焦的,以便用户可以与它们进行交互。
当然,人们可以肯定这种方法的相对优点与允许开发人员犯下不正确的数据关联错误有关,但是已经做出了决定并且你坚持使用它。
如果你真的在乎,你可以重新发明轮子,并使用线性布局创建自己的列表视图,它真的不那么难。在这种情况下,您当然可以获得您想要的任何行为。或者,将标题放在单独的布局中,而不是使用ListViews标题单元格。
假设,如果我对他们使用"的假设是重要的可接受性"在ListView单元格中实现它的方式(与ListViews的一些TalkBack魔法相反),您可以在绘制后将View Hierarchy爬行到Cell布局(因此Android Framework已经有了它的方式) ,并将isImportantForAccessibility重置为no。虽然,我强烈建议不要采用这种方法
答:我不确定它会起作用,这只是假设的(不,不会自己测试)。如果这个问题的逻辑确实在TalkBack方面,那么除非你想重新发明ListView或编写自己的屏幕阅读器,否则你真的会真正被软管化。B:一般来说,TalkBack尝试做的这些聪明的事情有助于提高可访问性,而不会伤害它。除非你真的知道可访问性,否则最好让Android做它的事情。
答案 1 :(得分:0)
我发现如果我将textviews设置为textIsSelectable(true),则Talkback会将这些textview识别为可以选择的元素。为了在没有激活对讲时不改变我的应用程序的功能,我使用AccessibilityManager检查是否已激活对讲。