|
本教程演示了如何创建一个简单的HelloWorld应用程序。 学习本教程,帮助熟悉Tizen 本机应用程序开发过程以及使用Tizen SDK安装模拟器或目标设备上创建应用程序。 当你正在开发一个更复杂的应用程序中,您可以利用 工具包含在SDK为了缓解的任务创建的功能和设计应用程序的UI。 创建一个HelloWorld应用程序- 创建HelloWorld项目
- 启动 Tizen IDE 。
- 在IDE中创建应用程序项目。
在项目创建,使用基本Tizen项目模板:在 新的Tizen本地项目 窗口中,选择 模板>移动- <版本> > UI应用程序>基本UI应用程序 。 - 定义 helloworld 为您的项目的名称并单击 完成 。
图:创建HelloWorld项目
- 新 helloworld 项目中所示 Project Explorer 视图的IDE,默认内容 tizen-manifest.xml 配置文件以及其他几个项目文件,包括:
- 公司inc 文件夹:应用程序头文件目录
- Src 文件夹:C文件目录
- 配置应用程序,并创建应用程序代码配置应用程序:
- 设置项目属性通过修改tizen-manifest.xml 文件。
- 实现的应用程序代码 helloworld.c 文件。
编写应用程序时,请注意,Tizen本机API遵循下列基本原则:
- 返回字符串的所有权
所有字符串作为指针应该返回被调用者除所述释放。
不是免费的内存可能会导致内存泄漏。 系统内存不足会引发系统低内存通知和一些应用程序可能被杀死。 作为一种启发式算法选择死亡的过程,它可以破坏系统。
- <font size="3">char *app_id_string = NULL;
- if(!app_get_id(&app_id_string))
- {
- // Use app_id_string;
- if(app_id_string != NULL)
- free(app_id_string);
- }</font>
复制代码 处理
处理提供了管理手段与之关联的一个实例。
处理广泛应用于Tizen本机API原因ABI的兼容性。
创建和销毁函数(创建/毁坏)提供为每个处理类型。
他们不创建和销毁处理本身,但他们操作实例与一个给定的相关处理。
这意味着一个句柄无效,直到相应的创建函数被调用和处理
相应的破坏函数被调用后有效。 还访问器功能(getter / setter)
访问的成员隐藏的结构被给定的处理。
- <font size="3">// Text message is represented by a handle
- messages_message_h sms_msg;
- // Create message and associate it with this handle
- messages_create_message(MESSAGES_TYPE_SMS, &sms_msg);
- // Destroy message
- messages_destroy_message(sms_msg);
- // Change the properties of the text message
- messages_set_text(sms_msg,"Hello, how are you?");
- messages_add_address (sms_msg,"01020157919", MESSAGE_RECIPIENT_TO);</font>
复制代码
- 异步函数调用一些Tizen本机API函数是异步的。
开始一个异步函数处理并返回之前处理完成为止。 然而,有时一个人应该知道,当这个处理完成为止。 在这种情况下,等待处理完成通知应正确地执行。 - 代码辅助Tizen IDE提供了API帮助和API悬停功能使写作内容在本地编辑器快速和有效的。
按CTRL + SPACE编辑你的代码时看到api可用如下:
图:代码协助
创建应用程序的UI与英语的 英语是Tizen本机图形工具包。 本教程介绍英语而不是一个成熟的Tizen应用程序,因为它不使用Appcore。 创建应用程序界面: - 添加一个接口
在本教程中,有以下练习:
- 一个窗口持有一切
- 一致,显示了虚拟键盘(Tizen指南要求的)
- naviframe用于应用程序,显示多个屏幕通过他们的生活与他们之间来回转换(Tizen指南要求的)
- 横框和
- 添加一个应用程序骨架appcore重要的对象指针存储在以下数据结构。
- <font size="3">typedef struct appdata
- {
- // All graphical objects here are pointers to the value of the type Evas_Object.
- Evas_Object *win;
- Evas_Object *conformant;
- Evas_Object *naviframe;
- } appdata_s;</font>
复制代码 创建并初始化指针包含只有0 main() 功能。 同样的结构 app_event_callback_s 类型,它拥有app-core相关的回调。
- <font size="3">main(int argc, char *argv[])
- {
- appdata_s *ad = {0,};
- int ret = 0;
- ui_app_lifecycle_callback_s event_callback = {0,};
- app_event_handler_h handlers[5] = {NULL,};
- event_callback.create = app_create;
- event_callback.terminate = app_terminate;
- event_callback.pause = app_pause;
- event_callback.resume = app_resume;
- event_callback.app_control = app_control;
- ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
- ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
- ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]);
- ret = ui_app_main(argc, argv, &event_callback, &ad);
- return ret;
- }</font>
复制代码 注意: 有关Appcore的更多信息,请参阅 应用程序框架的教程。
创建GUI对象
与创建GUI create_gui () 功能。 它接收一个指针来填写“广告”结构。
创建函数和马克静态的,因为它是唯一可以从当前的编译单元(允许编译器产生更快和更小的代码)。
在函数内部,创建一个窗口并设置其名称和标题“Hello World”。 添加一个回调在“删除请求”事件(当窗口被关闭)。
- <font size="3">static void
- create_gui(appdata_s *ad)
- {
- // Create the window
- ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
- elm_win_conformant_set(ad->win, EINA_TRUE);
- // Advertise which rotations are supported by the application; the
- // device_orientation callback is used to do the actual rotation when
- // the system detects the device's orientation has changed
- if (elm_win_wm_rotation_supported_get(ad->win)) {
- int rots[4] = { 0, 90, 180, 270 };
- elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
- }
- // Add a callback on the "delete,request" event; it is emitted when
- // the system closes the window
- evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
- // Alternatively, elm_win_autodel_set() can be used to close
- // the window (not the application) automatically
- // with the Back button, for example
- // elm_win_autodel_set(ad->win, EINA_TRUE);</font>
复制代码 首先符合走进窗口。 一切从现在开始创建。
- <font size="3"> // Create the conformant
- ad->conformant = elm_conformant_add(ad->win);
- // Set the conformant use as much horizontal and vertical space as
- // possible, that is, expand in both directions
- evas_object_size_hint_weight_set(ad->conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- // Set the conformant as the resize object for the window:
- // the window and the conformant grow together
- // in proportion to each other
- elm_win_resize_object_add(ad->win, ad->conformant);
- // Show the conformant since all widgets are hidden by default
- evas_object_show(ad->conformant);</font>
复制代码 naviframe是有用的应用程序显示多个屏幕:它使显示一个屏幕,切换到另一个地方,回到第一个(和做同样的和几个屏幕)。
只有一个屏幕是建立:创建naviframe,把内部的一致性。
- <font size="3"> // Create the naviframe
- ad->naviframe = elm_naviframe_add(ad->conformant);
- elm_object_content_set(ad->conformant, ad->naviframe);
- // Show the box
- evas_object_show(ad->conformant);</font>
复制代码 盒子可能是最常见的容器,它安排一组小部件以垂直或水平的方式。
- <font size="3"> // Create the box
- Evas_Object *box = elm_box_add(ad->naviframe);
- // Set the box vertical
- elm_box_horizontal_set(box, EINA_FALSE);
- // The box expands when its contents need more space
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- // The box fills the available space
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- // Add the box in the naviframe container
- elm_naviframe_item_push(ad->naviframe, "Hello World", NULL, NULL, box, NULL);
- // Show the box
- evas_object_show(box);</font>
复制代码 标签保存文本格式化和到多个行。
- <font size="3"> // Create the label
- Evas_Object *label = elm_label_add(box);
- // The label expands when its contents need more space
- evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- // The box fills the available space on the horizontal axis and is
- // centered on the vertical axis (placed at 0.5 vertically, that is, in the
- // middle)
- evas_object_size_hint_align_set(label, EVAS_HINT_FILL, 0.5);
- // Set the text for the label and set formatting through the HTML tags:
- // - "Hello World!" centered on the first line
- // - skip a line
- // - Add a longer text that does not fit on a single line but wraps at
- // the word boundaries
- elm_object_text_set(label,
- "<align=center>Hello World!</align><br>"
- "<br>"
- "<wrap = word>Clicking on the button below closes the application.</wrap>");
- // Add the label at the end of the box
- elm_box_pack_end(box, label);
- // Show the label
- evas_object_show(label);</font>
复制代码 最后一个部件是按钮。 当点击它退出应用程序。
- <font size="3"> // Create the button
- Evas_Object *button = elm_button_add(box);
- // The box expands when its contents need more space
- evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- // The button fills the available space on the horizontal axis and is
- // placed at the bottom of the vertical axis (1 is the end of the axis,
- // the coordinates start at (0, 0) on the top-left corner
- evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 1);
- // Set the text for the button
- elm_object_text_set(button, "Close!");
- // Add a callback on the button for the "clicked" event; implementation of
- // the callback is below
- evas_object_smart_callback_add(button, "clicked", clicked_cb, NULL);
- // Add the widget at the end of the box; since the axis starts in the top left
- // corner and the box is vertical, the end of the box is below the label
- elm_box_pack_end(box, button);
- // Show the button
- evas_object_show(button);</font>
复制代码 这是如何设置窗口显示在屏幕上的一切。
- <font size="3"> // Show window after the GUI is set up
- evas_object_show(ad->win);
- }</font>
复制代码 4.退出GUI
的 clicked_cb () 初等函数退出;函数的原型是常见的所有回调 evas_object_smart_callback_add ()。 把 clicked_cb () 以上功能 create_gui () 功能。
更多细节的回调,请参阅 监控智能对象的事件指南。
- <font size="3">static void
- clicked_cb(void *user_data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
- {
- elm_exit();
- }</font>
复制代码
- 构建和打包应用程序您已经完成了实现您的应用程序后,必须 构建它。
建立后,Tizen IDE自动包项目。
运行和调试应用程序
你可以在模拟器上运行的 HelloWorld 应用。
下图显示了在仿真器上运行的小部件。
以上文章有在线翻译生成,Tizen官方网站提供!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|