Tizen widget的使用

很久之前,工作需要学习了一段时间三星自家操作系统Tizen,这里分享一些学习成果,关于Tizen widget的使用。

Tizen的SDK,可到这里下载 https://www.tizen.org/

Enlightenment

Tizen使用的UI FrameWork是Enlightenment开源项目,简称E,是桌面系统中的一个窗口管理器。Enlightenment的第一个版本发布于1996年10月30日。

除了Enlightenment,还有QT、GTK、KDE等窗口管理器。

Enlightenment的源码,可到这里下载 http://enlightenment.org/

Enlightenment的logo

EFL

Enlightenment Foundation Library(EFL)是Enlightenment背后的库集:核心基础库。

关于EFL的学习及环境搭建,这里推荐一个CSDN的专栏:http://blog.csdn.net/efl_gui?viewmode=contents

Elementary只是其中一个widget库,如下图

Tizen widget的使用_第1张图片

widget的继承关系

先上一张widget的类继承关系图,这里有助于整体把握

Tizen widget的使用_第2张图片

widget的使用

1、background

以下是给window设置颜色背景

//ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
ad->win = elm_win_add(NULL, PACKAGE, ELM_WIN_BASIC);
ad->bg  = elm_bg_add(ad->win);
elm_bg_color_set(ad->bg, 255, 0, 255);//R,G,B
elm_win_resize_object_add(ad->win, ad->bg);
evas_object_show(ad->bg);
evas_object_show(ad->win);

以上代码缺一不可

效果图

Tizen widget的使用_第3张图片


2、conformant

(1)conformant介绍

conformant的中文意思是顺应、一致,那这到底是什么widget呢?

根据SDK帮助文档的说明

Theaim is to provide a widget that can be used in elementary apps to account forspace taken up by the indicator, virtual keypad & softkey windows when running the illume2 module of E17.

Soconformant content is sized and positioned considering the space required forsuch stuff, and when they popup, as a keyboard shows when an entry is selected,conformant content won't change.

illume备注

Illumeis a module for Enlightenment that modifies the user interface to work cleanlyand nicely on a mobile device. It has support for virtual keyboard

Tizen widget的使用_第4张图片

简而言之,conformant是当软键盘、通知栏和softkey这些widget出现时,重新计算它里面content的大小和位置

(2)conformant使用

conformant使用分以下三步:

①设置window为conformant window

elm_win_conformant_set(ad->win, EINA_TRUE);

②添加conformant widget

ad->conformant = elm_conformant_add(ad->win);
evas_object_size_hint_weight_set(ad->conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(ad->win, ad->conformant);
evas_object_show(ad->conformant);

③添加widget(示例box)作为conformant的内容

elm_object_content_set(ad->conformant, ad->box);

效果图

Tizen widget的使用_第5张图片
3、Box

在学习box之前,先看两个常用接口evas_object_size_hint_weight_set和evas_object_size_hint_align_set

我的理解:

hint:暗示、线索的意思,size hint就是说size的暗示、size的预估、size的提示、被推荐的size,这两个接口都包含有size hint的关键字,说明接口设置的属性可作为widget大小位置的参考、依据,但仅仅是参考,因为大小位置不仅仅由这些接口设定,所以这些接口设置了不一定起作用。这里和android自定义view中onMeasure的widthMeasureSpec、heightMeasureSpec有点类似。

x、y分别代表该object在x、y轴上的权重,即在x、y方向上所占的比例,范围都是0~1,缺省值为0,表示不扩展,EVAS_HINT_EXPAND(值为1),表示扩展

x的范围是0~1,0表示左对齐,1表示右对齐;y的范围是0~1,0表示顶端对齐,1表示底端对齐;特殊值EVAS_HINT_FILL(值为-1),表示填满,缺省值为0.5,即居中

总结如下:

(1)weightset里面的xy表示在相应轴上是否扩展和扩展的比例,0表示不扩展,0.3不表示占30%,如果所在容器只有一个控件,则扩展到整个空间,扩展的意思只是占有空间,并不改变控件的形状大小。

(2)alignset里面的xy表示对齐方式,特殊值EVAS_HINT_FILL表示填充分配给该控件的所有空间,比如如果该控件在x轴上设置weightEVAS_HINT_EXPAND,并且在x轴上设置alignEVAS_HINT_FILL,那么,该控件在x轴上就会填满。如果不设置EXPAND,就算设置了FILL,也是不会起作用的,因为EXPAND使控件扩展了空间

(3)特殊情况(感觉是bug)

①在box为垂直排列时,即使x轴的weight设为0(不扩展),如果x轴的align设为FILL,还是会起填充效果的。

②在box为水平排列时,即使y轴的weight设为0(不扩展),如果y轴的align设为FILL,也还是会起填充效果的。



以下是box的一些例子和效果
Tizen widget的使用_第6张图片 Tizen widget的使用_第7张图片

Tizen widget的使用_第8张图片 Tizen widget的使用_第9张图片
Tizen widget的使用_第10张图片 Tizen widget的使用_第11张图片
Tizen widget的使用_第12张图片 Tizen widget的使用_第13张图片
Tizen widget的使用_第14张图片 Tizen widget的使用_第15张图片


Tizen widget的使用_第16张图片 Tizen widget的使用_第17张图片


Tizen widget的使用_第18张图片 Tizen widget的使用_第19张图片
Tizen widget的使用_第20张图片 Tizen widget的使用_第21张图片
Tizen widget的使用_第22张图片


Tizen widget的使用_第23张图片 Tizen widget的使用_第24张图片
Tizen widget的使用_第25张图片 Tizen widget的使用_第26张图片

下面两个是特殊情况
Tizen widget的使用_第27张图片 Tizen widget的使用_第28张图片

Tizen widget的使用_第29张图片 Tizen widget的使用_第30张图片


上面讲完了weight和align,再看看box的一些接口
①添加box,elm_box_add(win)
②elm_box_horizontal_set,设置垂直或是水平分布,默认是垂直,如下图
Tizen widget的使用_第31张图片
③elm_box_homogeneous_set,设置是否均匀分布,如果设置了均匀分布,又会影响容器内控件的大小和位置
Tizen widget的使用_第32张图片 Tizen widget的使用_第33张图片


Tizen widget的使用_第34张图片 Tizen widget的使用_第35张图片
④elm_box_pack_start、elm_box_pack_end、elm_box_pack_before、elm_box_pack_after都是往box里面添加widget,只是添加的方式不同

box的嵌套效果
往一个box里面pack一个box,再往第二个box里面pack button,会是怎样?
Tizen widget的使用_第36张图片 Tizen widget的使用_第37张图片


Tizen widget的使用_第38张图片 Tizen widget的使用_第39张图片

4、Table

elm_table_pack(Evas_Object *obj, //pack到哪个table

                             Evas_Object*subobj, //什么objpack

                             int col, //pack到哪一列

                             int row, //pack到哪一行

                              int colspan, //跨多少列

                             int rowspan, //跨多少行

)

注意:colspan是从col开始计算的,如果总的跨度大于col的总数,则会新开一列。rowspan也是如此

②往一个table里面pack一个table1,要想table1生效,也要设置下面两个属性

evas_object_size_hint_weight_set(table1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);

evas_object_size_hint_align_set(table1, EVAS_HINT_FILL, EVAS_HINT_FILL);

参考代码

#include "table_widget_test.h"

typedef struct appdata {

} appdata_s;

static void
win_delete_request_cb(void *data , Evas_Object *obj , void *event_info)
{
	elm_exit();
}

static void
win_back_cb(void *data, Evas_Object *obj, void *event_info)
{
	/* Let window go to hide state. */
	elm_win_lower(data);
}

static void
create_base_gui(appdata_s *ad)
{
	Evas_Object *win, *label, *table, *bg, *table1;
	/* Window */
	win = elm_win_util_standard_add(PACKAGE, PACKAGE);
	elm_win_autodel_set(win, EINA_TRUE);

	evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, NULL);
	eext_object_event_callback_add(win, EEXT_CALLBACK_BACK, win_back_cb, win);

	table = elm_table_add(win);
	elm_win_resize_object_add(win, table);
	evas_object_show(table);
	elm_table_padding_set(table, 5, 5);
	elm_table_homogeneous_set(table, EINA_TRUE);

	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 255, 0, 255);
	evas_object_show(bg);
	elm_table_pack(table, bg, 0, 0, 1, 1);
	label = elm_label_add(win);
	elm_object_text_set(label, "label 0");
	evas_object_show(label);
	elm_table_pack(table, label, 0, 0, 1, 1);

	table1 = elm_table_add(win);
	evas_object_size_hint_weight_set(table1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(table1, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_show(table1);
	elm_table_pack(table, table1, 0, 0, 1, 1);
	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 125, 125, 125);
	evas_object_show(bg);
	elm_table_pack(table1, bg, 0, 0, 1, 1);
	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 64, 32, 64);
	evas_object_show(bg);
	elm_table_pack(table1, bg, 1, 1, 1, 1);


	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 255, 255, 0);
	evas_object_show(bg);
	elm_table_pack(table, bg, 1, 0, 1, 1);
	label = elm_label_add(win);
	elm_object_text_set(label, "label 1");
	evas_object_show(label);
	elm_table_pack(table, label, 1, 0, 1, 1);

	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 0, 255, 255);
	evas_object_show(bg);
	elm_table_pack(table, bg, 0, 1, 1, 1);
	label = elm_label_add(win);
	elm_object_text_set(label, "label 2");
	evas_object_show(label);
	elm_table_pack(table, label, 0, 1, 1, 1);

	bg = elm_bg_add(win);
	evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_bg_color_set(bg, 255, 0, 0);
	evas_object_show(bg);
	elm_table_pack(table, bg, 1, 1, 2, 1);
	label = elm_label_add(win);
	elm_object_text_set(label, "label 3");
	evas_object_show(label);
	elm_table_pack(table, label, 1, 1, 2, 1);

	/* Show window after base gui is set up */
	evas_object_show(win);
}

static bool
app_create(void *data)
{
	/* Hook to take necessary actions before main event loop starts
		Initialize UI resources and application's data
		If this function returns true, the main loop of application starts
		If this function returns false, the application is terminated */
	appdata_s *ad = data;

	create_base_gui(ad);

	return true;
}

static void
app_language_changed(void *data)
{
	/* Set the current language */
	char *locale = NULL;
	runtime_info_get_value_string(RUNTIME_INFO_KEY_LANGUAGE, &locale);
	elm_language_set(locale);
	free(locale);
}

static void
app_control(app_control_h app_control, void *data)
{
	/* Handle the launch request. */
}

static void
app_pause(void *data)
{
	/* Take necessary actions when application becomes invisible. */
}

static void
app_resume(void *data)
{
	/* Take necessary actions when application becomes visible. */
}

static void
app_terminate(void *data)
{
	/* Release all resources. */
}

int
main(int argc, char *argv[])
{
	appdata_s ad = {0,};
	app_event_callback_s event_callback = {0,};
	int ret = 0;

	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;
	event_callback.language_changed = app_language_changed;

	event_callback.low_memory = NULL;
	event_callback.low_battery = NULL;
	event_callback.device_orientation = NULL;
	event_callback.region_format_changed = NULL;

	ret = app_main(argc, argv, &event_callback, &ad);
	if (ret != APP_ERROR_NONE) {
		dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret);
	}

	return ret;
}

Tizen widget的使用_第40张图片

5、grid

grid即网格布局,用户指定布局大小和位置
①创建grid,elm_grid_add
②设置grid的大小,即设定有多少格子,默认为100*100,elm_grid_size_set(grid, w, h),如果设置了elm_win_resize_object_add(win, grid),则说明将屏幕分割为w*h的格子
③设置子控件的位置,elm_grid_pack(grid, subObj, x, y, w, h),x、y表示子控件的起始格子,w、h表示跨多少格子
Tizen widget的使用_第41张图片 Tizen widget的使用_第42张图片

6、button

①简单实用button
Tizen widget的使用_第43张图片
Tizen widget的使用_第44张图片
②复杂使用button
elm_button_autorepeat_set设置是否有长按事件
elm_button_autorepeat_initial_timeout_set第一次按键与repeat事件的时间间隔
elm_button_autorepeat_gap_timeout_set每次repeat事件的时间间隔

Tizen widget的使用_第45张图片

7、label

①基本使用
elm_label_ellipsis_set长文本用省略号表示
elm_label_slide_duration_set设置滚动速度
elm_label_slide_mode_set设置滚动模式
        ELM_LABEL_SLIDE_MODE_NONE不滚动
        ELM_LABEL_SLIDE_MODE_AUTO当文字超出label时滚动
        ELM_LABEL_SLIDE_MODE_ALWAYS一直滚动,就算不超出也滚动
elm_object_style_set设置label的样式
        marker文本居中
        slide_long文本从label的最右边进入,在label的最左边消失,与slide配合使用
        slide_short文本从label的最左边进入,在label的最右边消失,与slide配合使用
        slide_bounce文本在label之间弹跳
elm_label_line_wrap_set设置文本的包含模式
        ELM_WRAP_NONE长文本不换行
        ELM_WRAP_CHAR长文本字符截断并换行
        ELM_WRAP_WORD长文本单词截断并换行
        ELM_WRAP_MIXED先尝试WORD WRAP,如果失败再CHAR WRAP,比如整个屏幕都装不下一个单词
注意:
(1)在容器中使用elm_label_line_wrap_set接口之前,一定要先用elm_label_wrap_width_set设置wrap width,不然会出现问题
(2)如果设置了slide mode,则ellipsis的设置不起作用,试试便知
Tizen widget的使用_第46张图片

8、Entry

Entry在其他GUI中也叫EditText,是可输入文本的控件

一些普通接口

elm_entry_add,默认为multi-linewordwrapautosave,默认不滚动

elm_entry_autocapital_type_set设置自动大写(WORDSENTENCEALLCHARACTER

elm_entry_context_menu_item_add添加长按时弹出的menuitem

elm_entry_editable_set设置是否可以编辑

⑤插入文本

elm_entry_entry_set设置文本,会覆盖原有的

elm_entry_entry_append往最后添加文本

Elm_entry_entry_insert往光标当前位置添加文本

elm_entry_password_set设置为密码状态

elm_entry_select_all选取全部文本

elm_entry_input_panel_enabled_set是否弹出输入盘

elm_entry_input_panel_return_key_type_set设置输入盘中返回键类型

Formatted text

elm_entry_entry_append(entry, “<br>”);插入换行符

elm_entry_entry_append(entry,“<link>underline</link>”);下划线

Special markups

elm_entry_entry_set(entry, “<item size=16x16vsize=fullhref=emoticon/haha></item>”);表情

elm_entry_entry_append(entry, “<ahref=anc-01>”“<link>”“www.eclipse.org”“</link>”“</a>”);//anchortext类似超链接

elm_entry_entry_append(entry, “<font_size=48><color=#0000FF>font_color</color></font_size>”);字体颜色

Tizen widget的使用_第47张图片

9、check & radio

(1)check button
elm_check_add
elm_check_state_set设置复选框的状态
elm_check_state_get获取复选框的状态
(2)radio button
elm_radio_add
elm_radio_group_add添加radio为一个组,组内的所有radio只有单选
elm_radio_state_value_set设置radio代表的值
elm_radio_state_value_get获取radio代表的值
elm_radio_value_set(obj, value)设置group内的哪个radio被选中,要在elm_radio_group_add后面调用,否则不起效果,obj为group内的任意一个radio,假如group有三个radio,则value的范围是1~3,超出无效
elm_radio_value_get这个接口感觉和elm_radio_state_value_get是同样的功能
elm_radio_value_pointer_set关联一个指针值,当radio选择时,将指针指向的数设为elm_radio_state_value_set设置的值

10、slider

elm_slider_span_size_set设置slider的长度。如果同时设置了size hint的EXPAND和FILL,那就看哪个设置得最后,后面的设置会把前面的设置覆盖
elm_slider_min_max_set设置范围,默认是0.0~1.0
elm_slider_value_set设置滑块值
elm_slider_value_get获取滑块值
elm_slider_step_set(obj, step)设置步长,step的范围是0~1,slider的总步数是1/step
elm_slider_inverted_set值域范围翻转
Tizen widget的使用_第48张图片

11、progress bar

elm_progressbar_add

elm_progressbar_span_size_set设置progressbar长度

elm_progressbar_pulse_set设置为活动状态

elm_progressbar_pulse表示一种活动状态,表示正在执行任务,但不表示进度

elm_progressbar_value_get

elm_progressbar_value_set

Tizen widget的使用_第49张图片

12、scroller

elm_scroller_add

elm_object_part_content_set设置其他objscrollercontent后便使其他obj具有了滚动的特性

Tizen widget的使用_第50张图片

13、image

简单显示一张图片
Tizen widget的使用_第51张图片 Tizen widget的使用_第52张图片

14、icon

elm_icon_standard_set(obj, name) //name可以是以下这些
Tizen widget的使用_第53张图片 Tizen widget的使用_第54张图片 Tizen widget的使用_第55张图片 Tizen widget的使用_第56张图片

15、photo

photo是一个特殊的icon,如果photo控件没有设置任何图片,则显示一张default photo
elm_photo_add
elm_photo_file_set
Tizen widget的使用_第57张图片    Tizen widget的使用_第58张图片

16、photocam

photocam用来显示高分辨率图片
elm_photocam_add添加photocam控件

elm_photocam_file_set关联图片

elm_photocam_image_region_show显示图片某个指定区域,无动画

elm_photocam_image_region_bring_in显示图片某个指定区域,如果当前不在该区域,则通过动画方式移动过去

elm_photocam_gesture_enabled_set设置可通过手势缩放

缩放模式
Tizen widget的使用_第59张图片
Tizen widget的使用_第60张图片

17、list

elm_list_add

elm_list_item_append//添加itemlist的最后

elm_list_item_prepend添加itemlist的最前

elm_list_item_insert_after往某个item后面添加item

elm_list_multi_select_set设置多选

evas_object_smart_callback_add(list, “clicked,double”,list_double_click_cb, NULL);获取list item的双击事件

elm_list_mode_set可以设置以下mode

ELM_LIST_COMPRESS

ELM_LIST_SCROLL当文本长度超出容器大小时可以滚动

ELM_LIST_LIMIT

ELM_LIST_EXPAND

ELM_LIST_LAST

elm_object_item_part_text_get获取itemtext文本

elm_list_goshow之前调用,类似刷新一遍

Tizen widget的使用_第61张图片

18、genlist

elm_genlist_add

elm_genlist_item_append添加itemlist的后面

Tizen widget的使用_第62张图片

Elm_Genlist_Item_Class结构

item_style指明itemstyle,有defaultdouble_labelgroup_index……

decorate_item_style

decorate_all_item_style

func结构

func.text_get设置item的文本

func.content_get

func.state_get

func.del

parent:如果是第一级item,则parentNULL

type

ELM_GENLIST_ITEM_NONE

ELM_GENLIST_ITEM_TREE

ELM_GENLIST_ITEM_GROUP

func:选择该item时的callback

Tizen widget的使用_第63张图片

elm_genlist_item_prepend添加itemlist的最前面

elm_genlist_item_bring_in(item, type),把某个item显示到界面上,type表示动画效果,有以下

ELM_GENLIST_ITEM_SCROLLTO_NONE

ELM_GENLIST_ITEM_SCROLLTO_IN

ELM_GENLIST_ITEM_SCROLLTO_TOP

ELM_GENLIST_ITEM_SCROLLTO_MIDDLE


19、colorselector

elm_colorselector_add

elm_colorselector_color_set

elm_colorselector_color_get

elm_color_selector_mode_set显示模式

elm_colorselector_palette_clear清除调色板

elm_colorselector_palette_color_add添加新颜色到调色板

elm_colorselector_palette_item_color_get得到当前项颜色值

elm_colorselector_palette_name_set设置调色板的名字,不同名字调色板的颜色也不同(“painting”/”default”)

Tizen widget的使用_第64张图片

20、ctxpopup

elm_ctxpopup_add

elm_ctxpopup_item_append()

Tizen widget的使用_第65张图片

label表示显示的文字,icon表示显示的图标,func表示点击该item的回调


dismissed消息:

ctxpopup创建后,点击其他地方将会发出dismissed的消息,可在消息处理中删除ctxpopup,如

evas_object_smart_callback_add(ctxpopup,"dismissed",dismissed_cb,NULL);

Tizen widget的使用_第66张图片


21、Datetime

elm_datetime_add
elm_datetime_format_set设置datetime的显示格式,如elm_datetime_format_set(“%y %m %d”);

支持六个域Year, Month, Date, Hour, Minute,AM/PM,不支持秒

%F ----> year-month-day

%D ----> month-day-year

%y ----> year只显示年

%m ----> month只显示month

%b ---->根据系统语言显示月份,如英语显示Jan,中文则显示1

%d ---->只显示day

更多格式参考libc库的时间格式http://www.gnu.org/s/hello/manual/libc.html#Formatting-Calendar-Time

elm_datetime_field_visible_set(datetime,ELM_DATETIME_YEAR, EINA_FALSE);设置是否可见,不是设置了就一定可见,要上面的format中存在,才能设置是否可见,比如format中根本就没有year这一项,那么就算设置visibletrue也是看不到的
elm_datetime_field_limit_set(datetime,ELM_DATETIME_MONTH, 2, 5);设置某域的范围,设置不一定起作用
elm_datetime_value_get(obj,structtm *currtime)获取datetime控件的时间
Tizen widget的使用_第67张图片
Tizen widget的使用_第68张图片

22、Naviframe

naviframe全称navigationframe,是一个导航控件,由一个个的view组成,所有的view存放在栈里面,所谓的导航就是通过栈的pushpop操作,在view之间切换

Tizen widget的使用_第69张图片

elm_naviframe_item_push(obj,title_label,prev_btn,next_btn, content,item_style)

title_label:当前viewtitle

        prev_btn

        next_btn

        content:可用任何其他控件作为content,比如整个boxbox里面有其他控件

        item_style:“default”“basic”“overlap

elm_naviframe_item_pop返回到前一个view

elm_object_item_part_text_set(nf_it,“subtitle”, “this is sub title”);设置subtitle

Tizen widget的使用_第70张图片


23、Layout

(1)自定义layout

layout,离不开edc文件,edc的学习请访问http://docs.enlightenment.org/stable/efl/edcref.html

一个layout对应一个edc file里面的一个group,通过elm_layout_file_set(layout_obj,edj_file,group_name)这个接口关联起来,注意第二个参数是edj文件,不是edc文件,edjedc编译后对应的二进制文件。

Tizen widget的使用_第71张图片

Tizen widget的使用_第72张图片

①访问edc的data

Tizen widget的使用_第73张图片



通过char *title_data =elm_layout_data_get(layout, “Key”);//key值和value一一对应,通过key值可获取到value


②访问edc的TEXT part

通过elm_object_part_text_set来访问edctextpart,第二个参数指定part name

Tizen widget的使用_第74张图片


③访问edc的box part

Tizen widget的使用_第75张图片

除了通过elm_layout_box_insert_at接口可以操作boxpart外,还有

elm_layout_box_append

elm_layout_box_prepend

elm_layout_box_insert_before

elm_layout_box_remove

elm_layout_box_remove_all


Tizen widget的使用_第76张图片


④访问edc的table part

Tizen widget的使用_第77张图片

通过elm_layout_table_pack去设置edc里面的tablepart,第二个参数指定part name

Tizen widget的使用_第78张图片


⑤访问edc的swallow part

elm_object_part_content_set这个接口可以访问swallowpart

Tizen widget的使用_第79张图片

Tips

通过elm_object_part_content_set添加到swallow partwidget不需要调用evas_object_show显示出来,这是比较特别的地方,控件的大小、位置、可见性等属性完全由swallow part来控制。


拓展:

swallowpart不代表任何东西,它只在layout中占了一块地方,任何东西都可以往里面丢,比如boxtablebuttonlist,甚至是另一个layout……任何的evas_object,正由于layoutswallowpart的属性,从中也可看出大部分widget都继承layout的端倪了


(2)预定义layout

除了用户定义的edc文件,系统已经预先定义好了一些layout,关联预定义的layout和用户定义的layout有不同的方式,用户定义的是通过elm_layout_file_set,预定义的是通过elm_layout_theme_set

Tizen widget的使用_第80张图片

Tizen widget的使用_第81张图片

其中elm_layout_theme_set的第三个参数可以是下面这些

Tizen widget的使用_第82张图片


24、theme

这里所说的theme并不是一种widget

在学习layout的时候提过,一个layout对应一个edc文件里面的一个group,其实一个group就是一个theme,比如之前学习label时通过elm_object_style_set设置label的样式为”maker”slide_longslide_shortslide_bounce,实际上一个样式就是一个themelabel的这些样式在label.edc文件中都会有相对应的一个group


所以,如果一个widget有多个theme,实际上是对应的edc文件中有多个group


elm_object_style_set可设置objtheme,这个函数会去搜索theme list

themelist里面有三种themedefaultextensionoverlay

Ødefault:系统本身包含的theme,比如上面labelmakerslide_long等等。默认存在于themelist

Øextension:用户自定义的,名字不能和default的相同,在edc文件中实现。通过elm_theme_extension_add把用户定义的extension加入到themelist

Øoverlay:用户自定义的,和default的相同,会覆盖掉default的,在某种特定情况下,不能增加extension,又不能修改default,就用这种overlay的方式。通过elm_theme_overlay_addoverlay加入到themelist。(建议overlay的方式尽量少用)


elm_object_style_set搜索themelist的顺序是:overlay -> default -> extension


25、notify

elm_notify_add

elm_notify_align_set(obj,double horizontal, double vertical)

Øhorizontal:表示notifyparent中水平方向的对齐方式,范围是0.0 ~ 1.00.0表示左对齐,1.0表示右对齐,填充用ELM_NOTIFY_ALIGN_FILL
Øvertical:表示notifyparent中垂直方向的对齐方式,范围是0.0 ~ 1.00.0表示顶部对齐,1.0表示底部对齐,填充用ELM_NOTIFY_ALIGN_FILL

elm_object_part_content_set:设置notifyswallowpart为其他content

elm_notify_timeout_set:设置弹出notifytimeout时间,超过时间后notify将消失

elm_notify_allow_events_set:设置是否接收在notify外面的点击事件,如果true,点notify外面将收到“block,clicked”事件,在事件处理中可使notify隐藏起来

Tizen widget的使用_第83张图片


26、popup

popup是个加强版的notify,在项目中会有很多地方用到,比如低电弹框

elm_popup_add

elm_popup_timeout_set设置timeout的时间,超时会收到timeout信号

可通过elm_object_part_text_setelm_object_part_content_set等接口设置下面这些text partcontentpart

Tizen widget的使用_第84张图片

elm_popup_orient_set设置popup的弹出方向

Tizen widget的使用_第85张图片


效果图

Tizen widget的使用_第86张图片


27、panel

panel,面板控件,详见截图

elm_panel_add

elm_panel_orient_set设置panel出现的方向

elm_panel_hidden_set设置隐藏状态

elm_panel_toggle触发是否隐藏

elm_object_part_content_set设置panel里面content的内容

Tizen widget的使用_第87张图片


28、panes

panes,两个content之间可拖动bar

elm_panes_add

elm_object_part_content_set可以设置leftright两个contentpart

elm_panes_horizontal_set设置panes的方向

elm_panes_fixed_set如果设置为trueleftrightpart将不可拖动,并且等大

Tizen widget的使用_第88张图片


29、toolbar

elm_toolbar_add

elm_toolbar_shrink_mode_set设置bar超出parent大小时的显示模式

elm_toolbar_item_append添加子item(图1

elm_toolbar_item_state_additem添加状态(图2、图3

elm_toolbar_item_menu_set设置为menu(图4

Tizen widget的使用_第89张图片


30、Menu

elm_menu_add

elm_menu_item_add,如果第二个参数parent为某一个item,则当前创建的是子item

Tizen widget的使用_第90张图片

elm_menu_item_separator_add添加item之间的分隔线

Tizen widget的使用_第91张图片


31、index

侧边栏的导航,通常按字母表顺序排序,比如用于联系人的快速定位,一般结合listgenlistgengrid等控件共同使用。

elm_index_add

elm_index_item_append

Tizen widget的使用_第92张图片

letter表示对应的字母,func表示当字母选择后的回调,data表示字母选后显示的list item

elm_index_level_go刷新

Tizen widget的使用_第93张图片


32、flip

flip控件,表示一种在frontback两个content之间的动画切换控件,其中front可见,back不可见

有两种方式触发动画

①用户交互手动触发,用户通过滑动/拖动的方式触发

elm_flip_interaction_direction_enabled_set设置某个方向上是否允许用户触发

elm_flip_interaction_direction_hitsize_set设置某个方向上要靠近边缘多少的位置触发,比如如下设置

表示在某个方向靠近边缘1/10的范围内拖动才能触发动画切换,值为0.1 ~ 1.0

elm_flip_interaction_set设置动画切换效果,有如下:


②程序触发动画

elm_flip_go即可触发动画,有以下动画切换模式

Tizen widget的使用_第94张图片

Tizen widget的使用_第95张图片


33、fileselector

elm_fileselector_add

elm_fileselector_expandable_set如果为true,则用户可以选择文件夹,否则只能选择文件

elm_fileselector_path_set设置初始选择的位置

elm_fileselector_folder_only_set列表中只显示文件夹

elm_fileselector_selected_get选择的文件全路径包括文件名

elm_fileselector_path_get选择的文件路径

elm_fileselector_is_save_set是否可以保存文件,true可以输入更改文件名

elm_fileselector_mode_set设置list还是grid模式

elm_fileselector_multi_select_set是否可以多选

Tizen widget的使用_第96张图片

34、separator

这是一个分隔线widget
elm_separator_add
elm_separator_horizontal_set设置是否水平
Tizen widget的使用_第97张图片

35、spinner

elm_spinner_add

elm_spinner_label_format_set(spinner, "%1.1f");设置字符串的格式

elm_spinner_step_set设置步长

elm_spinner_min_max_set(spinner, -50.0, 250.0);设置最大最小值

elm_object_style_set(spinner, “vertical”);设置spinner为垂直

elm_spinner_editable_set设置是否可以编辑

elm_spinner_special_value_add(spinner, 1, “January”);添加特别字样,用January代表1

elm_spinner_interval_set设置长按箭头时每次增减的时间

Tizen widget的使用_第98张图片

36、win

elm_win_add,创建一个window,这个window是看不见的,show出来就是透明一块,所以一般要加background
elm_win_util_standard_add,创建一个标准window,包含了background
项目中一般比较完整健壮的app都会包含下面这些基本widget
Tizen widget的使用_第99张图片

elm_win_activate激活

elm_win_alpha_set透明度

elm_win_autodel_set如果设置autodeltrue,关闭窗口时会自动delete掉所有内容

elm_win_conformant_set

elm_win_fullscreen_set全屏

elm_win_iconified_set最小化

elm_win_indicator_mode_set

elm_win_maximized_set最大化

elm_win_override_set设置为true后,不被windowmanager管理,尽量不用

elm_win_rotation_set旋转

elm_win_title_set

Tizen widget的使用_第100张图片


除了widget外,elementary还包含一些基本模块,对所有widget通用,详情请参考SDK文档

Tizen widget的使用_第101张图片


你可能感兴趣的:(tizen)