我使用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)这是否意味着根本没有办法尝试用mNativeContentView替换window.getDecorView? 我可以通过某种方式访问mNativeContentView吗?
2)是否有另一种方法可以使其作为顶部窗口来获取Chromebook上的鼠标/触摸事件?
3)在日志中,我可以看到: SurfaceFlinger:重复的图层名称:更改SurfaceView ... 重复的图层名称:更改-SurfaceView的背景-...
This does not occur on real Android tablet obly on Chromebook.
这只是无害的警告还是表明错误?
通过覆盖派生的NativeActivity类中的dispatchTouchEvent来解决。如果正常的Activity.dispatchTouchEvent无法处理,则为顶视图添加显式的dispatchTouchEvent。