Pol*_*i97 2 java android accessibility screen-readers talkback
有没有办法更改屏幕阅读器(在 Android 中为 TalkBack)读取可访问元素的顺序?就像如果我有 3 个元素,最初按 b1、b2、b3 的顺序读取,在按下某个按钮后顺序会改变并变成 b3、b1、b2?
编辑 这是我按照@Nikos Hidalgo 提示尝试的
代码:
Button b1,b2,b3, changeorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearlayout = findViewById(R.id.linearlayout);
changeorder = new Button(this);
changeorder.setText("Presso to change order");
changeorder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("BUTTON","Clicked change order button");
changeorder.setAccessibilityTraversalBefore(b3.getId());
b3.setAccessibilityTraversalAfter(changeorder.getId());
b3.setAccessibilityTraversalBefore(b1.getId());
b1.setAccessibilityTraversalAfter(b3.getId());
b1.setAccessibilityTraversalBefore(b2.getId());
b2.setAccessibilityTraversalAfter(b1.getId());
changeorder.setText("Order changed b3,b1,b2");
}
});
changeorder.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
linearlayout.addView(changeorder);
b1 = new Button(this);
b1.setText("BUTTON 1");
b1.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
linearlayout.addView(b1);
b2 = new Button(this);
b2.setText("BUTTON 2");
b2.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
linearlayout.addView(b2);
b3 = new Button(this);
b3.setText("BUTTON 3");
b3.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
linearlayout.addView(b3);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法以编程方式定义/更改遍历顺序(TalkBalk 中解析视图的顺序):
\n\npublic void setAccessibilityTraversalAfter (int afterId)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n设置视图的 id,之后在可访问性遍历中访问该视图。屏幕阅读器必须先访问另一个视图的内容,然后再访问此视图的内容。例如,如果视图 B 设置为在视图 A 之后,则屏幕阅读器将在遍历 B 的整个内容之前遍历 A 的整个内容,无论[原文如此]它使用什么遍历策略。
\n
(来源)
\n\npublic void setAccessibilityTraversalBefore (int beforeId)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n设置在可访问性遍历中访问此视图之前的视图的 ID。屏幕阅读器必须先访问该视图的内容,然后再访问其前一个视图的内容。例如,如果视图 B 设置为在视图 A 之前,则屏幕阅读器将在遍历 A 的整个内容之前遍历 B 的整个内容,无论[原文如此]它使用什么遍历策略。
\n
(来源)
\n\n由于它们\xe2\x80\x99都是 View 的公共方法,因此您可以像这样使用它们:
\n\nfindView(R.id.view1).setAccessibilityTraversalBefore(R.id.view2);\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:\n确保所有视图均可聚焦,如果您以编程方式添加更多视图,请确保设置该importantForAccessibility属性。
例如myView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
| 归档时间: |
|
| 查看次数: |
4714 次 |
| 最近记录: |