android - 如何在 NativeUI C++ 基础结构中解析实际的 native UI 小部件?

标签 android c++ ios mobile mosync

当在 MoSync 代码库中使用 NativeUI C++ 类时,我想知道并理解最终调用实际 IOS/Android/WP native 小部件的代码。

我快速浏览了 GitHub 上的几个类,比如 Button.cpp等,但我无法轻易看到如何引用真正的 native 设备小部件。

我不是 C/C++ 开发人员 (Java),但我有点期待一些 #ifdefs 或其他东西来“切换”出相应的底层实现。如果不是这样,那我也没关系,请放纵我的好奇心。

最佳答案

像提到的 Button.cpp 这样的 C++ 小部件类在 Widget.cpp 中有它们的基类,它根据字符串参数创建任何小部件。此外,任何小部件属性都是通过字符串参数有效设置的。

my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");

MoSync 在 WidgetFunctions.idl 中为 Native UI 小部件实现了一个“IDL”接口(interface):

typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);

这是对通过 C 调用接口(interface)从 NativeUI::Widget 调用的函数的独立于语言的描述:

handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");

到这里为止,我们都在 MoSync C/C++ 层,这是一种具有系统调用接口(interface)的 VM。从这里开始,它通过不同的方法被翻译成其他平台的语言(Java、C# 等):

MoSyncNativeUI.java中可以使用Java Native Interface(JNI)调用Android运行时的相应函数:

public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)

或者它被编译成中间“PIPE 语言”,一种伪汇编语言,然后这种语言被翻译成适用于 Windows Phone 7 的 Visual Studio C#,或适用于 iOS 的 XCode 项目。

所有平台都在与每个应用程序包 bundle 在一起的“运行时”中实现了一个 UI 引擎。此运行时在相应的 SDK 中预构建并实现那些 Native UI 调用。

关于android - 如何在 NativeUI C++ 基础结构中解析实际的 native UI 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21388241/

相关文章:

ios - 为每个 UISegementedControl 索引设置不同的文本颜色

ios - NSPredicate 搜索具有 nil 值的连接表

java - Android Studio 中的线程 (onClick)

android - 动态 setOnCLickListener

Android:如何读取低级网络信息(RSCP、EcN0、第 3 层信令)?

android - Android获取网关地址的方法

c++ - 如何防止 XAML UI 元素在失去焦点时修改其外观

c++ - 有什么方法可以使用用户定义的 operator< 对结构在 QSortFilterProxyModel 中对该结构的 QVariants 进行排序?

c++ - 无法删除 GDI+ 图像

ios - 使用 SpriteKit 场景编辑器设计复杂的对象