Можно ли сгруппировать заголовок и фрагмент панели инструментов для доступности? - PullRequest
0 голосов
/ 02 октября 2019

Я бы хотел сгруппировать в ActionBar Заголовок и подтип , когда TalkBack активирован, сохраняя порядок: backButton next (title + SubTitle) next menuItems

Решения / обходные пути, о которых я думал, но у меня не сработало:

  • Создайте два TextView и перекрывайте панель инструментов (проблема здесь, она будет мешатьorder, BackButton, next menuItems, next (title + subTitle) )

  • Установите contentDescription на ToolBar таким образом, чтобы оно выглядело какЗаголовок и подзаголовок были сгруппированы вместе, проблема здесь снова в том, что порядок (Название + подзаголовок) будет читаться первым, затем кнопка назад, затем ItemMenu

Любые другие идеикак сгруппировать заголовок + подзаголовок панели инструментов?

1 Ответ

0 голосов
/ 09 октября 2019

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

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

// Find the View you want to represent the complete title subtitle combination.
// As well as the individual views for title and subtitle
View groupedView = findTheTitleBarView();
View subTitleView = propbablyAChildOfGroupedView;
View titleView = propbablyAChildOfGroupedView;

ViewCompat.setAccessibilityDelegate(groupedView, object : AccessibilityDelegateCompat() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View?,
        info: AccessibilityNodeInfoCompat?
    ) {
        info?.text = subTitleView.text() + " " + titleView.text();
        super.onInitializeAccessibilityNodeInfo(host, info)
    }
})

// Ensure the children of those views are not individually focusable.

titleView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
subtitleView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);

Это не надежный способ сделать это. Единственный надежный способ сделать это - создать собственную строку заголовка. Android OS может переопределить любой доступный AccessibilityDelegate, когда захочет. К сожалению, для этого не поддерживается Android API!

...