Android приложение на Chromebook не может использовать просмотр / получение пользовательских событий - PullRequest
0 голосов
/ 26 мая 2020

Я использую Delphi для создания многоплатформенного приложения. Работает на Android. На Chromebook он начал давать сбой после Chrome обновления ОС через go. Delphi использует собственную Windows обработку.

Первоначально mNativeContentView.getViewTreeObserver (). AddOnGlobalLayoutListener (this); в NativeActivity возникла исключительная ситуация с нулевым указателем.

После некоторой адаптации я получаю пользовательский интерфейс, как в Delphi, но он не реагирует ни на какие щелчки / прикосновения пользователя. У меня есть часы с таймером, поэтому я могу видеть, что приложение работает, только его нельзя "щелкнуть".

На https://developer.android.com/topic/arc/input-compatibility Я обнаружил упомянутую разницу для Android и Chromebook:

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

Не возитесь с Window.getDecorView (). Если вы хотите добавить представления верхнего уровня, добавьте их в представление, которое вы установили как Activity.setContentView ().

Delphi использует window.getDecorView.

Если я посмотрю в Android источников, которые я вижу для NativeActivity: setContentView (mNativeContentView);

mNativeContentView является закрытым членом.

Итак, это вызывает у меня несколько вопросов:

1) Означает ли это нет возможности попытаться заменить window.getDecorView на mNativeContentView? Могу ли я каким-то образом получить доступ к mNativeContentView?

2) Есть ли другой способ заставить его работать как верхнее окно, получающее события мыши / касания на Chromebook?

3) В журналах я вижу: SurfaceFlinger: повторяющееся имя слоя: изменение SurfaceView ... повторяющееся имя слоя: изменение фона для -SurfaceView - ...

 This does not occur on real Android tablet obly on Chromebook.

Это просто безобидное предупреждение или указывает на ошибку?

1 Ответ

0 голосов
/ 27 мая 2020

Решено путем переопределения dispatchTouchEvent в производном классе NativeActivity. Добавлен явный dispatchTouchEvent для вида сверху, если обычный Activity.dispatchTouchEvent не обрабатывает его.

...