Диалог специальных возможностей/DialogFragment читает текст вместо описания контента

У меня есть диалог, в котором мало текстовых представлений. Для каждого текстового просмотра я установил различное описание контента и текст. Например.

<TextView
    android:id="@+id/tv_3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="TV 3"
    android:text="Text Number 3" />

Когда я показываю диалог пользователю, Talkback читает текст (т.е. текст номер 3) каждого текстового просмотра, а не описание контента (т.е. ТВ 3).

Однако, если я наведу курсор на любое текстовое представление, Talkback прочитает описание контента.

Как заставить его читать описание содержимого при отображении диалогового окна?

PS: я пытался установить описание контента в макете, а также через код, но не повезло

Заранее спасибо.


person light365    schedule 06.08.2014    source источник


Ответы (2)


Это побочный эффект того, как события AccessibilityEvents верхнего уровня объединяют свой текст. Вероятно, это необходимо исправить в TalkBack, но вы можете решить эту проблему в своем приложении, расширив TextView или установив AccessibilityDelegate в представлении.

По сути, вы хотите, чтобы onPopulateAccessibilityEvent() заполнял событие описанием содержимого, а не текстом.

Предположим, вы расширяете TextView:

public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
    // The super method would normally add the text, but we want to
    // add the content description instead. No need to call super.
    event.getText().add(getContentDescription());
}

Имейте в виду, что в большинстве ситуаций вы хотите, чтобы описание содержимого и внешний вид текстового представления совпадали, и что переопределение поведения по умолчанию может привести к неожиданным результатам. Общая рекомендация — не задавать описания контента для текстовых представлений.

person alanv    schedule 11.08.2014
comment
Я попробую. Спасибо :) - person light365; 13.08.2014

Интересно, что он подхватывает первый визуальный текст, даже если в этом представлении есть описание контента. Вот способ отключить первый текст, который читается автоматически.

Dialog.getWindow().getDecordView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)
person Vairavan    schedule 13.03.2021