【发布时间】:2020-02-28 14:55:53
【问题描述】:
有没有办法改变屏幕阅读器(在 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);
}
【问题讨论】:
-
您能解释一下为什么您希望可访问性顺序不同于 DOM 中的顺序或 tab 顺序吗?否则,您很可能会引入可访问性问题和错误,而不是解决它们。
-
@GrahamRitchie 因为在元素可以在屏幕上移动的应用程序中,例如使用拖放的应用程序,在某些视图移动后,我需要重新排列它们的可访问性顺序。
标签: java android accessibility screen-readers talkback