问题描述
我想使用 EDC 更改以编程方式创建的标签样式:
style {
name: "list_text_title_normal";
base: "font=Tizen:style=Bold font_size=32 color=#FF9100FF text_class=tizen ellipsis=1.0";
}
我试图在这一行中包含我的 EDJ:
elm_theme_extension_add(NULL,PATH_TO_EDJ);
然后应用标签的样式:
elm_object_style_set(label,"list_text_title_normal");
但是标签不尊重风格,我该怎么办?我不想将样式定义放入 C/C++ 代码中(尽管我知道可以在文本中通过类似 HTML 的格式设置颜色和字体)。
解决方法
(1) style
在您的 EDC 中
style {
name: "list_text_title_normal";
base: "font=Tizen:style=Bold font_size=32 color=#FF9100FF text_class=tizen ellipsis=1.0";
}
上面的样式,实际上是一个Textblock Style,在EDC中用于EDC文件中的Textblock部分。据我所知,无法从 EDC 文件中获取这种样式。 如果您想在您的 EDC 中使用它,您需要添加一个包含具有该样式的 Textblock 部分的组。 (注意:您不能在 elm_layout 对象上使用 elm_label API。)
例如)在 EDC 中
group { "my_edc_group";
parts {
...
textblock { "elm.text"; // your part name...
desc { "default";
...
text {
style: "list_text_title_normal";
...
}
...
}
}
...
}
}
在你的 C/C++ 代码中
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout,YOUR_PATH_FOR_EDJ_FILE,"my_edc_group");
elm_object_part_text_set(layout,"elm.text","Hello World");
(2) elm_object_style_set
在你的 c/c++ 代码中
elm_object_style_set(label,"list_text_title_normal");
上面的 style
表示小部件的主题风格。 Tizen/EFL 中的小部件有一些预定义的主题样式集。它与您在 EDC 文件中添加的内容完全不同。在小部件中添加新的 style
非常困难且难以维护您的代码。我不建议您自定义或添加主题样式。
(3) 不使用 EDC 的更简单方法。
// note: You should not set ellipsis and text_class as markup tag in a text for Elm_Label widget
// string from a file:
// eg. "font=Tizen:style=Bold font_size=32 color=#FF9100FF"
const char *textblockStyle = readLineFromFile(file); // your readLineFromFile function
Eina_Strbuf *buf = eina_strbuf_new();
eina_strbuf_append_printf(buf,"<%s>%s",textblockStyle,text);
elm_object_text_set(label,eina_strbuf_string_get(buf));
eina_strbuf_free(buf);