Android更改setAccessibilityTraversalAfter()无效的可访问性顺序

问题描述 投票:0回答:1

我想要的是更改可访问性顺序,即按按钮后,屏幕阅读器(在该Android案例中为话语提示)读取元素的顺序。这是我到目前为止尝试过的方法,但是它不起作用,顺序仍然是最初的降序排列。(在我的示例中,按钮的顺序为b1,b2,b3,在按按钮更改顺序后,我希望该顺序变为b3,b1,b2)。

CODE:

   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);


    }
android accessibility screen-readers talkback
1个回答
0
投票

这对于评论来说太长了,不是这样的“答案”。

请勿尝试更改活动元素的遍历顺序(按下按钮时该按钮将为该按钮)。

即删除changeorder.setAccessibilityTraversalBefore(b3.getId());位。

还请记住,您只需要使用一个版本的setAccessibilityTraversal作为b3.setAccessibilityTraversalBefore(b1.getId());b1.setAccessibilityTraversalAfter(b3.getId());相同

因此简化为:-

public void onClick(View v) {
        Log.i("BUTTON","Clicked change order button");

    b3.setAccessibilityTraversalAfter(changeorder.getId());
    b1.setAccessibilityTraversalAfter(b3.getId());
    b2.setAccessibilityTraversalAfter(b1.getId());
    changeorder.setText("Order changed b3,b1,b2");
    etc.
© www.soinside.com 2019 - 2024. All rights reserved.