Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:以编程方式更改可访问性顺序_Java_Android_Accessibility_Screen Readers_Talkback - Fatal编程技术网

Java Android:以编程方式更改可访问性顺序

Java Android:以编程方式更改可访问性顺序,java,android,accessibility,screen-readers,talkback,Java,Android,Accessibility,Screen Readers,Talkback,有没有办法改变屏幕阅读器(比如对讲机)读取可访问元素的顺序? 比如,如果我有3个元素,最初按b1,b2,b3的顺序读,当我按下某个按钮后,顺序会改变,变成b3,b1,b2 编辑 这就是我在@Nikos Hidalgo提示下尝试的 代码: 您可以使用以下方法以编程方式定义/更改遍历顺序(在TalkBalk中解析视图的顺序): public void setAccessibilityTraversalAfter (int afterId) 设置在可访问性遍历中访问该视图之后的视图id。屏幕阅读器必

有没有办法改变屏幕阅读器(比如对讲机)读取可访问元素的顺序? 比如,如果我有3个元素,最初按b1,b2,b3的顺序读,当我按下某个按钮后,顺序会改变,变成b3,b1,b2

编辑 这就是我在@Nikos Hidalgo提示下尝试的

代码:


您可以使用以下方法以编程方式定义/更改遍历顺序(在TalkBalk中解析视图的顺序):

public void setAccessibilityTraversalAfter (int afterId)
设置在可访问性遍历中访问该视图之后的视图id。屏幕阅读器必须先访问另一个视图的内容,然后再访问此视图的内容。例如,如果视图B设置为在视图A之后,那么屏幕阅读器将在遍历B的全部内容之前遍历A的全部内容,并考虑其使用的遍历策略

()

设置在可访问性遍历中访问此视图之前的视图的id。屏幕阅读器必须先访问此视图的内容,然后再访问它前面的内容。例如,如果视图B设置为在视图A之前,那么屏幕阅读器将在遍历A的整个内容之前遍历B的整个内容,并考虑其使用的遍历策略

()

由于它们都是公共的查看方法,您可以这样使用它们:

findView(R.id.view1).setAccessibilityTraversalBefore(R.id.view2);
编辑: 确保所有视图都是可聚焦的,如果要以编程方式添加更多视图,请确保设置了
importantForAccessibility
属性


e、 g.
myView.setImportantForAccessibility(View.importantforaccessibility\u表示可访问性\u YES)

您能解释一下为什么希望可访问性顺序与DOM或选项卡顺序不同吗?否则,您很可能会引入可访问性问题和错误,而不是解决它们。@GrahamRitchie因为在元素可以在屏幕上移动的应用程序中,如使用拖放的应用程序,在一些视图移动后,我需要重新排列其可访问性顺序。我尝试使用3个按钮(b1、b2、b3),按下4°按钮后,我使用了
b1.setAccessibilityTraversalAfter(b3.getId())
b2.setAccessibilityTraversalAfter(b1.getId())将顺序更改为b3、b1、b2,但不更改happened@Poli97按钮是动态创建的吗?我想知道是否需要根据何时以及如何绑定视图来重新启动活动。如果您可以编辑您的问题以添加所有相关的代码,那么可能会更容易看到发生了什么。是的,按钮是动态创建的。我尝试使用您的建议
myView.setImportantForAccessibility(View.IMPORTANT\u FOR\u ACCESSIBILITY\u YES)
,但也不起作用。我编辑了问题并添加了我尝试过的代码。顺便说一句,谢谢你的帮助嘿,你找到解决办法了吗?@Poli97对不起,这个办法过去对我很有效。更改顺序后,尝试对视图调用invalidate(),以强制它们重新绘制,并查看这是否会产生影响。
public void setAccessibilityTraversalBefore (int beforeId)
findView(R.id.view1).setAccessibilityTraversalBefore(R.id.view2);