有没有办法将 NativeActivity 的内容设置为用 Java 创建的组件(例如 FrameLayout、ImageView 等)?我需要使用 NativeActivity(用于在 Xperia Play 上获取触摸板输入),但我还需要能够查看在 Java 代码中创建的组件。
我尝试重写 onCreate 命令并在那里调用 setContentView,但尽管这不会引发任何错误,但它也不会执行任何操作(显然是因为内容视图已由本机代码设置)。是否有某种窗口 ID 或其他东西我可以传递给本机代码来告诉它内容视图应该是什么,或者可以以某种方式在 XML 中设置它以将 NativeActivity 的内容视图设置为我可以修改的组件来自爪哇?
如果您需要更多信息,请告诉我。
我将在这里为其他有同样问题的人发布答案,因为我最终找到了一种有效的方法。
在 onCreate() 方法中,如果您要设置任何特定的窗口标志(FEATURE_NO_TITLE、FLAG_FULLSCREEN、FLAG_KEEP_SCREEN_ON 等),请在调用 super.onCreate() 之前执行这些操作(否则它们将被忽略)。然后无论你通常把它放在哪里:
setContentView( whatever );
改为这样做:
getWindow().takeSurface( null );
getWindow().setContentView( whatever );
这是从 Java 端控制内容的基本方法。在代码中处理内容的任何位置,请使用“getWindow()”而不是“this”。
其他一些需要记住的事情是,普通的 onKey 和 onTouch 方法不会被调用(它们的本机等效方法将被调用),所以如果您需要能够在 Java 端处理输入,您必须设置建立一些 JNI 链接以将信息从本机发送到 Java。我相信其他所有内容都包含在官方 XPeria Play 触摸板示例代码中(AndroidManifest.xml 的添加以及其他内容)。
如果您想查看我的项目以供参考,它是开源的,可以在以下位置找到:
http://www.paulscode.com/forum/index.php?topic=75.msg1540#msg1540
只需单击“XPeria Play Touch-Pad 示例”旁边的“源代码”链接即可。但它对您来说可能并不是那么有用,因为这是一个相当大的项目,并且可能很难找到您正在寻找的东西。如果您有任何问题,请在我的论坛上发布问题或给我发送电子邮件,我很乐意提供帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)