Отправляет email-рассылки с помощью сервиса Sendsay

За 2020-07-22

[prg] Re[2]: Не добавляется виртуальное view к реальному view в android

Здравствуйте Анатолий. Я пытался использовать похожий алгоритм,но у меня
talkback не видит view. Я решил эту проблему по-другому и обновил
репозиторий https://github.com/AlexandrKozlovskiy/test. Идея в том,чтобы
посылать accessibilityEvent типа AccessibilityFocused,когда отрабатывает
соответствующий action. Координаты в моём коде взяты с потолка,хотя в
случае с ссылками их нужно будет как-то рассчитывать самостоятельно.
Ещё,как я понял по исходникам telegram,чтобы мы могли находить эти
виртуальные view прощупыванием,нам надо переопределить вроде метод
класса View onHoverEvent,и там уже смотреть на координаты motionEvent.
Кстати ещё сложность расчёта координат ссылок,т.е виртуальных View
заключается в том,что,как я понимаю,при прокрутке нам надо считать
координаты ссылок с нуля и надо понять,на каком виртуальном view
добавлять action scroll,ведь текста может быть очень много.
Может,конечно,той прокрутки,которая реализована в программе изначально и
достаточно для этого,но мне кажется,что при добавлении виртуальных View
мне тоже надо будет учитывать прокрутку. Ещё мне непонятно,какие
координаты устанавливает метод класса accessibilityNodeInfo
setBoundsInParent? Вот метод setBoundsInScreen,как я понял,устанавливает
координаты виртуальных view на экране. Может метод setBoundsInParent
устанавливает координаты относительно чего мы устанавливаем эти
координаты,т.е на какой точке экрана у нас будет точка с координатами 0,0?

   2020-07-22 18:29:40 (#3655265)

[prg] Re: Не добавляется виртуальное view к реальному view в android

Приветствую всех!
В принципе, ваш код должен работать.
Подход верный -- переопределить getAccessibilityNodeProvider() и передать свою реализацию AccessibilityNodeProvider.
Другой вариант -- использовать setAccessibilityDelegate() и передать свою реализацию AccessibilityDelegate. В этом случае не надо наследовать свой view от требуемого.
Проблема, скорее всего, в том, что вы используете тосты для отладки, а они не все и не всегда успевают озвучиваться TalkBack.
Используйте системный лог.
Также попробуйте для начала осуществлять навигацию по виртуальным view с помощью фокуса доступности, так как эти виртуальные view предназначены для него.
Пример рабочего варианта AccessibilityNodeProvider:
private final AccessibilityNodeProvider mProvider = new AccessibilityNodeProvider() {

@Override

public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) {

if(virtualViewId== View.NO_ID) {

AccessibilityNodeInfo info = AccessibilityNodeInfo.obtain(CustomizedEditText.this);

onInitializeAccessibilityNodeInfo(info);

info.setParent((View) getParentForAccessibility());

info.setContentDescription("Test of contentDescription of parent");

info.addChild(CustomizedEditText.this,0);

return info;

} else {

AccessibilityNodeInfo info =AccessibilityNodeInfo.obtain();

info.setContentDescription("virtual contentDescription");

info.setSource(CustomizedEditText.this,virtualViewId);

info.setParent(CustomizedEditText.this);

info.setPackageName(getContext().getPackageName());

info.setClassName(EditText.class.getName());

info.addAction(AccessibilityNodeInfo.ACTION_CLICK);

info.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);

info.setText("virtual text");

info.setEnabled(true);

return info;

}

}

@Override

public boolean performAction(int virtualViewId, int action, Bundle arguments) {

Log.v(TAG, "perform action: " + action +" virtual view: " + virtualViewId);

if(action==AccessibilityNodeInfo.ACTION_CLICK)

Log.v(TAG, "action click");

if(action==AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS)

Log.v(TAG, "action acc focused");

return super.performAction(virtualViewId, action, arguments);

}

};

Успехов. Анатолий.
Исходное сообщение > а у меня задача пока
> что просто добавить одно виртуальное view к реальному view.
[...]
> Я создал репозиторий,чтобы те,кто
> захочет мне помочь,смогли посмотреть мой код. Вы можете сделать это на
> https://github.com/AlexandrKozlovskiy/test. Заранее

   "i_chay" 2020-07-22 00:26:03 (#3655252)