Приложение Android на Chromebook не может использовать просмотр/получение пользовательских событий

Я использую Delphi для создания многоплатформенного приложения. Он работает на Android. На Chromebook он начал давать сбой после обновления Chrome OS некоторое время назад. 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.

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


person martinbe    schedule 26.05.2020    source источник


Ответы (1)


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

person martinbe    schedule 27.05.2020