首页 > 解决方案 > Chromebook 上的 Android 应用无法使用查看/获取用户事件

问题描述

我使用 Delphi 创建多平台应用程序。它适用于安卓系统。在 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) 这是否意味着根本无法尝试用 mNativeContentView 替换 window.getDecorView?我可以以某种方式访问​​ mNativeContentView 吗?

2)是否有另一种方法让它作为顶部窗口在 Chromebook 上获取鼠标/触摸事件?

3)在日志中我可以看到:SurfaceFlinger:重复图层名称:更改 SurfaceView ...重复图层名称:更改 -SurfaceView 的背景 - ...

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

这只是一个无害的警告还是表明错误?

标签: javaandroiddelphiviewchromebook

解决方案


通过在派生的 NativeActivity 类中重写 dispatchTouchEvent 来解决。为顶视图添加了显式 dispatchTouchEvent,以防普通 Activity.dispatchTouchEvent 无法处理它。


推荐阅读