java - 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.
这只是一个无害的警告还是表明错误?
解决方案
通过在派生的 NativeActivity 类中重写 dispatchTouchEvent 来解决。为顶视图添加了显式 dispatchTouchEvent,以防普通 Activity.dispatchTouchEvent 无法处理它。
推荐阅读
- python - 无法让我的程序返回主循环
- openocd - Openocd 错误:命令名称“dap”无效 - 无法通过 ST-Link/V2 连接 Blue Pill
- c - C中的二进制到文本文件转换
- docker - 可以在 kubernetes 中将本地图像用于 pod yaml 吗?
- c++ - C++Builder6 中的 Random_shuffle 替代方案
- java - Java LinkedList 用于存储和排序用户输入。请协助
- javascript - 使用 Node.js 将多个条目插入 SQL Server
- google-play - Google 收据验证 - 401 - permissionDenied
- google-apps-script - 尝试从容器脚本中删除命名的外部工作表
- c++ - #包括
导致 bind() 函数调用在编译时抛出错误,为什么?