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

В Android Studio, используя Java, чтобы установить фокус доступности для определенного вида, например, после нажатия кнопки, вы должны сделать myview.sendAccessibilityEvent(AccessibilityEvent.WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED). В Xamaring, используя C#, самое близкое, что я нашел, это myview.SendAccessibilityEvent(EventTypes.ViewAccessibilityFocused);, но это не очень хорошо работает, на самом деле, он только считывает имя доступа myview, фактически не фокусируясь на этом, фокус оставаться на нажатой кнопке. Я также пытался myview.SendAccessibilityEvent(EventTypes.ViewFocused);, но он тоже не работает.

Еще одна вещь, которую я нашел, это myview.SendAccessibilityEventUnchecked(AccessibilityEvent.WindowsChangeAccessibilityFocused);, но я получил ошибку, говорящую Argument 1: cannot convert from 'Android.Views.Accessibility.WindowsChange' to 'Android.Views.Accessibility.AccessibilityEvent', даже если говорят, что SendAccessibilityEventUnchecked требует AccessibilityEvent в качестве аргумента.

Есть идеи, как решить? Или есть идеи о том, как установить фокус доступности для определенного представления после какого-либо события? (Обратите внимание, что при необходимости я просто тестирую его на Android native, чем мне понадобится использовать его в проекте Forms с использованием Dependency Service)

Ответы [ 2 ]

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

Проблема решена, правильный путь для достижения этого должен быть myview.SendAccessibilityEvent(EventTypes.ViewHoverEnter) с тем же целочисленным значением, что и Android значение WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED.

Другой способ - сделать myview.SendAccessibilityEvent((EventTypes) (int) WindowsChange.AccessibilityFocused), так что чтобы выполнить двойное приведение, int и EventTypes, на WindowsChange.AccessibilityFocused, потому что WindowsChange отличается от перечисления EventTypes.

Я оставляю открытую проблему github, где я получил эти ответы git выпуск .

0 голосов
/ 25 февраля 2020

WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED является подтипом для TYPE_WINDOWS_CHANGED , который должен отправляться только системой. И фокус доступности не будет изменен при отправке события доступности.

Фактически, отправка события доступности запускает службу доступности, и вы можете изменить фокус доступности в методе onAccessibilityEvent службы с помощью:

public override void OnAccessibilityEvent(AccessibilityEvent e)
{
   //you can use event type and source node to see if the event is sent by you
    AccessibilityNodeInfo sourceNode = e.Source;
    AccessibilityNodeInfo targetNode = sourceNode.FocusSearch(FocusSearchDirection.Down);
    targetNode.PerformAction(Android.Views.Accessibility.Action.AccessibilityFocus);
}

Подробнее о фокусировке доступности и фокусе ввода здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...