tizen - Tizen:使用循环 Genlist
问题描述
我正在 Tizen Studio 中使用 UI Builder 创建一个可穿戴应用程序。
据说这是一种方便的 UI 方式,但这是一个谎言:因为不允许您手动编辑生成的代码。
请告诉我有一些方法可以做到这一点。
更详细地说:我想在下面有一个小图标和一个可滚动列表,以及 Circle Genlist(列表包含 UI Builder 中定义的 6 个项目):https ://docs.tizen.org/application/native/guides/ui/ efl/可穿戴设备/component-circle-genlist/
上面的这个网站指出,对于 Circle Genlist,我必须首先定义正常的 Genlist:
genlist = elm_genlist_add(parent);
circle_genlist = eext_circle_object_genlist_add(genlist, surface);
然后我必须设置滚动策略:
eext_circle_object_genlist_scroller_policy_set(circle_genlist,
ELM_SCROLLER_POLICY_OFF,
ELM_SCROLLER_POLICY_ON);
然后我必须启用它:
eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
如果我将 Genlist 放到面板中,UI 构建器会添加这些行:
vc->genlist1= elm_genlist_add(vc->box7);
...
vc->circle_object_genlist1= eext_circle_object_genlist_add(vc->genlist1, uib_views_get_instance()->get_window_obj()->circle_surface);
eext_rotary_object_event_activated_set(vc->circle_object_genlist1, EINA_TRUE);
所以它看起来几乎完美,但它并没有制定政策。没问题,只要把那条线放在那里!不。您不能,因为下一个保存/运行操作将重新创建整个 UI,因此将删除您的额外行,并且没有已知的方法可以避免这种情况。(除了手动创建整个 UI)。
但!我可以在创建视图时获取控件,并添加了以下几行:
if(vc2->box7 && vc2->circle_object_genlist1) {
eext_circle_object_genlist_scroller_policy_set(vc2->circle_object_genlist1, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
Elm_Genlist_Item_Class *title_itc = elm_genlist_item_class_new();
Elm_Genlist_Item_Class *pad_itc = elm_genlist_item_class_new();
title_itc->item_style = "title";
title_itc->func.text_get = _gl_title_text_get;
//title_itc->func.content_get = gl_title_icon_get;
title_itc->func.del = NULL;
pad_itc->item_style = "padding";
pad_itc->func.del = NULL;
elm_genlist_item_prepend(vc2->circle_object_genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->circle_object_genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
}
政策下方的行也是上面链接的 Tizen 网站的建议。
但是,当然也有未知的功能需要进行逆向工程。我最喜欢的是gl_title_icon_get
。如果您在 Google 中搜索此内容,您将得到 1 个结果。(或者现在是 2,因为我在这篇文章中也提到了它。)
正如您可能已经发现的那样:即使添加了这些行,模拟器根本不会在侧面显示圆形滚动条。
所以,我想要得到这样的东西:
但是有了漂亮的圆形滚动条,Samsung Gears 无处不在(仅滚动 Genlist,并将图标留在顶部):
解决方案
我没有 UI Builder 的任何专长,但我可以给你一些关于 genlist 小部件的建议。
- 滚动条政策
对于circle genlist,我认为您必须仅启用滚动策略的垂直轴。
eext_circle_object_genlist_scroller_policy_set(vc2->circle_object_genlist1, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
// Auto is show scroll bar when the list items can scrollable.
但请检查这个 vc2->circle_object_genlist1 是正确的对象。您可以打印对象指针并检查它是否是相同的地址。
- 图标标题
可悲的是,Genlist标题样式只有文本。要显示图标,您可以使用“完整”样式而不是“标题”样式。内容部分名称为“elm.swallow.content”。
在 gl_title_icon_get 回调中,检查部件名称是否为“elm.swallow.content”并返回正确的图像。
所以代码将是,
title_itc->item_style = "full";
//title_itc->func.text_get = _gl_title_text_get;
title_itc->func.content_get = gl_title_icon_get;
title_itc->func.del = NULL;
而 gl_title_icon_get 将是,
static Evas_Object*
gl_title_icon_get(void *data, Evas_Object *obj, const char *part)
{
if (!strcmp(part, "elm.sawllow.content"))
{
Evas_Object *image = elm_image_add(obj);
elm_image_file_set(image, IMG_URL); //image resource url
return image;
}
return NULL;
}
- 添加标题和填充
elm_genlist_item_prepend(vc2->circle_object_genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->circle_object_genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
您在 genlist API 中传递 vc2->circle_object_genlist1 但它需要是 genlist 对象而不是 circle_genlist,因此 vc2->genlist1 是正确的。
elm_genlist_item_prepend(vc2->genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
请检查这里,如果您有更多问题,请在此处回复!谢谢你。
推荐阅读
- c# - Linq SUM 值错误
- visual-studio - Azure WebJob - 创建目录失败
- javascript - 将 jQuery ajax 调用写入 JavaScript 的 XmlHttpRequest
- javascript - MomentJS plus Map 已弃用错误
- algorithm - 具有递归和循环的程序的时间复杂度
- regex - sed -n 中的多模式
- css - 如何使用角材料表使表中的按钮响应
- html - 图片未显示在 div 中
- javascript - 节点 shebang 行上的“解析错误:意外令牌”
- c# - 从 Web API 解析 C# 中的 JSON.Net