Android — Как реальные родной виджет пользовательского интерфейса разрешается в инфраструктуре NativeUI C ++?

Я хотел бы знать и понимать код, который в конечном итоге вызывает фактические собственные виджеты IOS / Android / WP, когда в базе кода MoSync используется класс NativeUI C ++.

Я быстро взглянул на несколько классов на GitHub, например Button.cpp и т. д., но я не могу легко увидеть, как ссылки на реальные нативные виджеты устройства.

Я не разработчик C / C ++ (Java), но я как бы ожидал, что некоторые #ifdefs или что-то «выключат» соответствующую базовую реализацию. Если это не так, то это нормально для меня, просто потакайте моему любопытству.

0

Решение

Классы виджетов C ++, такие как Button.cpp упомянутые имеют свой базовый класс в Widget.cpp который создает любой виджет на основе строкового аргумента. Кроме того, любые свойства виджета эффективно задаются через строковые аргументы.

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

MoSync реализует интерфейс «IDL» для виджетов Native UI в WidgetFunctions.idl:

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

Это не зависящее от языка описание функций, которые вызываются из NativeUI :: Widget через интерфейс вызова C:

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

До этого момента мы находились на уровне MoSync C / C ++, который является своего рода виртуальной машиной с интерфейсом системных вызовов. Отсюда он переводится на языки других платформ (Java, C # и т. Д.) Различными способами:

Он может использовать Java Native Interface (JNI) для вызова соответствующих функций во время выполнения Android в MoSyncNativeUI.java:

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

Или он компилируется в промежуточный «язык PIPE», диалект псевдо-ассемблера, затем этот язык переводится в Visual Studio C # для Windows Phone 7 или в проект XCode для iOS.

Все платформы реализуют механизм пользовательского интерфейса в «среде выполнения», которая входит в комплект каждого приложения. Эта среда выполнения предварительно встроена в соответствующий SDK и реализует эти вызовы Native UI.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]