Android: изменить порядок доступности программно - PullRequest
2 голосов
/ 28 февраля 2020

Есть ли способ изменить порядок, в котором программа чтения с экрана, в android случае TalkBack, должна читать доступные элементы? Например, если у меня есть 3 элемента, которые сначала читаются в порядке b1, b2, b3, после того, как я нажимаю определенную кнопку, порядок меняется и становится b3, b1, b2?

РЕДАКТИРОВАТЬ Это то, что Я пытался следовать @Nikos Hidal go подсказка

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


    }

1 Ответ

2 голосов
/ 28 февраля 2020

Вы можете программно определить / изменить порядок обхода (порядок, с которым анализируются представления в TalkBalk), используя следующие методы:

public void setAccessibilityTraversalAfter (int afterId)

Устанавливает идентификатор представления, после которого этот посещается в обход доступа. Программа чтения с экрана должна посетить содержимое другого представления, прежде чем его содержимое. Например, если представление B настроено на просмотр после представления A, то программа чтения с экрана будет проходить весь контент A, прежде чем проходить весь контент B, учитывая [sic], какую стратегию обхода он использует.

( source )

public void setAccessibilityTraversalBefore (int beforeId)

Устанавливает идентификатор представления, до которого это посещение посещается при обходе доступности. Программа чтения с экрана должна посетить содержимое этого представления перед тем, как оно предшествует. Например, если для представления B задано представление перед представлением A, программа чтения с экрана просканирует все содержимое B перед тем, как перейти ко всему содержимому A, с учетом [sic] используемой им стратегии обхода.

( source )

Поскольку они оба публикуются c методов просмотра, вы можете использовать их следующим образом:

findView(R.id.view1).setAccessibilityTraversalBefore(R.id.view2);

РЕДАКТИРОВАТЬ : убедитесь, что все ваши виды являются фокусируемыми, и если вы программно добавляете больше видов, убедитесь, что вы установили атрибут importantForAccessibility.

например, myView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);

...