如标题问题所述,我想创建一个使用图标作为背景的按钮。 我正在使用360x360的可穿戴圆圈模拟器。
我尝试了很多代码和示例,但没有成功。
上次使用的代码:
static void
create_base_gui(appdata_s *ad)
{
/* Window */
ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
elm_win_autodel_set(ad->win, EINA_TRUE);
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);
}
eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
/*Box*/
ad->box = elm_box_add(ad->win);
evas_object_size_hint_weight_set(ad->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(ad->box);
elm_win_resize_object_add(ad->win, ad->box);
ad->button2 = elm_button_add(ad->box);
elm_object_text_set(ad->button2, "Click me");
evas_object_size_hint_weight_set(ad->button2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(ad->button2, EVAS_HINT_FILL, EVAS_HINT_FILL);
ad->icon2 = elm_icon_add(ad->box);
elm_image_file_set(ad->icon2, "C/Tizen/testWorkspace/BasicUI/shared/res/basicui.png", NULL);
elm_image_resizable_set(ad->icon2, EINA_TRUE, EINA_TRUE);
elm_object_part_content_set(ad->button2, "icon", ad->icon2);
elm_object_content_set(ad->button2, ad->icon2);
elm_box_pack_end(ad->box, ad->button2);
evas_object_show(ad->button2);
/* Show window after base gui is set up */
evas_object_show(ad->win);
}
创建按钮并且可以点击(尚未定义任何行为)。 图标不会显示。
我做错了什么?
由于
和默认的BasicUI示例
答案 0 :(得分:1)
您需要从tizen系统的角度声明路径。 那么正确的路径是
/opt/usr/apps/org.somepackage.yourapp/shared/res/youricon.png
不用说org.somepackage.yourapp是你的应用程序的包路径,youricon.png是你的标志。
您甚至可以在设备管理器中查看图标的位置。 在下图中,它是
/opt/usr/apps/org.example.settingsui/shared/res/settingsui.png
这不是非常好的解决方案,但有更好的方法:
您可以使用任一功能
app_get_shared_resource_path();
app_get_resource_path();
您可以编写如下方法:
static void
app_get_shared_resource(const char *file_in, char *path_out, int path_max)
{
char *res_path = app_get_shared_resource_path();
if (res_path) {
snprintf(path_out, path_max, "%s%s", res_path, file_in);
free(res_path);
}
}
然后像这样使用它
char icon_path[128] = {0,};
app_get_shared_resource("youricon.png", icon_path, 128);
// create your button and stuff and then
elm_image_file_set(ic, icon_path, NULL);
对于tizen 2.3.X及更低版本,所有这些都更有价值。自Tizen 2.4起,您可以使用Resource Manager
答案 1 :(得分:0)
我的猜测是该图标应添加到button
控件而不是box
控件上。
所以这个:
ad->icon2 = elm_icon_add(ad->box);
应该是:
ad->icon2 = elm_icon_add(ad->button);
希望有所帮助!