1

我正在关注 Tizen 开发者网站上的本教程

我无法理解将正在讨论的代码片段的确切位置。从教程的呈现方式来看,它们并没有真正告诉您哪些代码在哪里。已经做了好几天了。

最终的 .c 文件应该是什么样子?

有人可以帮忙吗?

4

2 回答 2

2

请检查以下代码,这将帮助您理解完整的原生 Webview 示例:

    #include "webviewexample.h"

    // EWK Webkit 需要的头文件
    #include "EWebKit.h"

    typedef 结构应用程序数据 {
        Evas_Object *赢;
        Evas_Object *符合;
        Evas_Object *标签;
        Evas_Object *入口;
        Evas_Object *web_view;
        Evas_Object *back_button;
        Evas_Object *forward_button;
    } 应用数据_s;

    静态空白
    win_back_cb(void *data, Evas_Object *obj, void *event_info)
    {
        appdata_s *ad = 数据;
        /* 让窗口进入隐藏状态。*/
        elm_win_iconified_set(ad->win, EINA_TRUE);
    }

    静态空白
    btn_go_cb(void *data, Evas_Object *obj, void *event_info)
    {
        appdata_s* 广告 = 数据;
        ewk_view_url_set(ad->web_view, elm_object_text_get(ad->entry) );
    }

    静态空白
    btn_prev_cb(void *data, Evas_Object *obj, void *event_info)
    {
        appdata_s* 广告 = 数据;
        如果(ewk_view_back_possible(广告->web_view)== EINA_TRUE)
            ewk_view_back( 广告->web_view );
    }

    静态空白
    btn_next_cb(void *data, Evas_Object *obj, void *event_info)
    {
        appdata_s* 广告 = 数据;
        如果(ewk_view_forward_possible(广告->web_view)== EINA_TRUE)
            ewk_view_forward(广告->web_view);
    }

    静态空白
    view_focus_set(appdata_s *ad, Eina_Bool 焦点)
    {
       // 我们从 elm 焦点模型中窃取焦点并开始做事
       // 在这里手动,所以 elm 现在不知道发生了什么。告诉榆树它的
       // 顶级 UI 组件是不聚焦的,所以 elm 放弃了焦点
       elm_object_focus_set(elm_object_top_widget_get(ad->win), EINA_FALSE);
       evas_object_focus_set(ad->web_view, 焦点);
    };

    静态空白
    on_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
    {
        appdata_s* 广告 = 数据;
        Evas_Event_Mouse_Down *ev= (Evas_Event_Mouse_Down *)event_info;

        如果(ev->按钮== 1)
            view_focus_set(广告,EINA_TRUE);
    }

    静态空白
    my_table_pack(Evas_Object *table, Evas_Object *child, int x, int y, int w, int h)
    {
       evas_object_size_hint_align_set(孩子,EVAS_HINT_FILL,EVAS_HINT_FILL);
       evas_object_size_hint_weight_set(孩子,EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
       elm_table_pack(table, child, x, y, w, h);
       evas_object_show(孩子);
    }

    静态空白
    create_base_gui(appdata_s *ad)
    {
        /* 设置策略在最后一个窗口关闭时退出 */
        elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
        /* 窗户 */
        ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
        elm_win_autodel_set(ad->win, EINA_TRUE);

        int rots[4] = { 0, 90, 180, 270 };
        elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);

        eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);

        /* 符合 */
        /*ad->conform = elm_conformant_add(ad->win);
        elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
        elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
        evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        elm_win_resize_object_add(ad->win, ad->conform);
        evas_object_show(ad->conform);*/

        /* 标签*/
        /*ad->label = elm_label_add(ad->conform);
        elm_object_text_set(ad->label, "Hello EFL");
        evas_object_size_hint_weight_set(广告->标签,EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
        elm_object_content_set(ad->conform, ad->label);
        evas_object_show(ad->label);*/

        {
            /* 放置表格的框,以便我们可以底部对齐表格
             * 窗口将拉伸所有调整大小的对象内容以赢得大小 */
            Evas_Object *box = elm_box_add(ad->win);
            evas_object_size_hint_weight_set(框,EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
            elm_win_resize_object_add(ad->win, box);
            evas_object_show(框);

            /* 桌子 */
            Evas_Object *table = elm_table_add(ad->win);
            /* 使表格同质 - 每个单元格的大小都相同 */
            elm_table_homogeneous_set(表,EINA_TRUE);
            /* 设置 10 像素的填充乘以 UI 的比例因子 */
            elm_table_padding_set(table, 5 * elm_config_scale_get(), 10 * elm_config_scale_get());
            /* 让表格子分配区域在框内展开 */
            evas_object_size_hint_weight_set(表,EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
            /* 将表格设置为填充宽度但与框的底部对齐 */
            evas_object_size_hint_align_set(表,EVAS_HINT_FILL,EVAS_HINT_FILL);
            elm_box_pack_end(盒子,桌子);
            evas_object_show(表);

            {
                /* 入口 */
                ad->entry = elm_entry_add(ad->win);
                elm_entry_scrollable_set(ad->entry, EINA_TRUE);
                eext_entry_selection_back_event_allow_set(ad->entry, EINA_TRUE);
                elm_object_text_set(ad->entry, "http://www.tizen.org");
                my_table_pack(table, ad->entry, 0, 0, 3, 1);

                /* 按钮 1 */
                Evas_Object *btn = elm_button_add(ad->win);
                elm_object_text_set(btn,“上一个”);
                evas_object_smart_callback_add(btn, "点击", btn_prev_cb, ad);
                my_table_pack(table, btn, 0, 1, 1, 1);

                /* 按钮 2 */
                btn = elm_button_add(ad->win);
                elm_object_text_set(btn,“去”);
                evas_object_smart_callback_add(btn, "点击", btn_go_cb, ad);
                my_table_pack(table, btn, 1, 1, 1, 1);

                /* 按钮 3 */
                btn = elm_button_add(ad->win);
                elm_object_text_set(btn, "下一个");
                evas_object_smart_callback_add(btn,“点击”,btn_next_cb,广告);
                my_table_pack(table, btn, 2, 1, 1, 1);

                /* 网络视图 */
                Evas *evas = evas_object_evas_get(ad->win);
                广告->web_view = ewk_view_add(evas);
                ewk_view_url_set(ad->web_view, elm_object_text_get(ad->entry) );

                //处理鼠标事件
                evas_object_event_callback_add(ad->web_view, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, ad);

                my_table_pack(table, ad->web_view, 0, 2, 3, 8);


            }
        }

        /* 设置基本 gui 后显示窗口 */
        evas_object_show(ad->win);
    }

    静态布尔
    应用程序创建(无效*数据)
    {
        /* 钩子在主事件循环开始之前采取必要的行动
            初始化 UI 资源和应用程序的数据
            如果此函数返回 true,则应用程序的主循环开始
            如果此函数返回 false,则应用程序终止 */
        appdata_s *ad = 数据;

        create_base_gui(广告);

        返回真;
    }

    静态空白
    app_control(app_control_h app_control, void *data)
    {
        /* 处理启动请求。*/
    }

    静态空白
    app_pause(无效*数据)
    {
        /* 当应用程序变得不可见时采取必要的措施。*/
    }

    静态空白
    app_resume(无效*数据)
    {
        /* 当应用程序变得可见时采取必要的行动。*/
    }

    静态空白
    app_terminate(无效*数据)
    {
        /* 释放所有资源。*/
    }

    静态空白
    ui_app_lang_changed(app_event_info_h event_info, void *user_data)
    {
        /*APP_EVENT_LANGUAGE_CHANGED*/
        字符 *locale = NULL;
        system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
        elm_language_set(语言环境);
        免费(语言环境);
        返回;
    }

    整数
    主要(int argc,char *argv[])
    {
        appdata_s 广告 = {0,};
        memset(&ad, 0x00, sizeof(appdata_s));
        int ret = 0;

        ui_app_lifecycle_callback_s event_callback = {0,};
        memset(&event_callback, 0x00, sizeof(ui_app_lifecycle_callback_s));
        app_event_handler_h 处理程序[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_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);

        ret = ui_app_main(argc, argv, &event_callback, &ad);
        如果(ret!= APP_ERROR_NONE){
            dlog_print(DLOG_ERROR, LOG_TAG, "app_main() 失败。err = %d", ret);
        }

        返回 ret;
    }

于 2016-05-25T07:04:55.993 回答
1

您可以查看链接以了解您的理解: Tizen Mobile 2.3 WebViewer Example

我希望这可以帮助你。

于 2016-04-27T11:23:16.633 回答