这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore4tlvgl_5 [2020/12/02 16:56] zgf |
icore4tlvgl_5 [2022/04/01 11:12] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-11-18 | yang | 初次建立 | | | V1.0 | 2020-11-18 | yang | 初次建立 | | ||
行 57: | 行 56: | ||
* **1.3对齐** | * **1.3对齐** | ||
使用**lv_obj_align(obj, obj_ref, LV_ALIGN_..., x_ofs, y_ofs)**可以将一个对象与另一个对象对齐。 | 使用**lv_obj_align(obj, obj_ref, LV_ALIGN_..., x_ofs, y_ofs)**可以将一个对象与另一个对象对齐。 | ||
- | • **obj** 是要对齐的对象。 | + | * **obj** 是要对齐的对象。 |
- | • **obj_ref** 是参考对象,**obj** 将与之对齐。如果为**obj_ref = NULL**,则将使用**obj**的父项。 | + | * **obj_ref** 是参考对象,**obj** 将与之对齐。如果为**obj_ref = NULL**,则将使用**obj**的父项。 |
- | • 第三个参数**LV_ALIGN_...**是对齐方式的类型。 | + | * 第三个参数**LV_ALIGN_...**是对齐方式的类型。 |
- | • 最后两个参数 **x_ofs, y_ofs**允许您在对齐对象后将其移动指定数量的像素。 | + | * 最后两个参数 **x_ofs, y_ofs**允许您在对齐对象后将其移动指定数量的像素。 |
对齐方式类型如下图所示,对齐类型的构建方式类似于 **LV_ALIGN_ + OUT_TOP_MID**。 | 对齐方式类型如下图所示,对齐类型的构建方式类似于 **LV_ALIGN_ + OUT_TOP_MID**。 | ||
{{ :icore4t:icore4t_rtt_lvgl_5_1.png?direct |}} | {{ :icore4t:icore4t_rtt_lvgl_5_1.png?direct |}} | ||
行 80: | 行 79: | ||
如果** LV_USE_OBJ_REALIGN** 在 **lv_conf.h** 中使能,则对齐参数会被保存在对象中。然后,只需调用**lv_obj_realign(obj)**即可重新对齐对象。等效于**lv_obj_align**使用相同的参数再次调用。 | 如果** LV_USE_OBJ_REALIGN** 在 **lv_conf.h** 中使能,则对齐参数会被保存在对象中。然后,只需调用**lv_obj_realign(obj)**即可重新对齐对象。等效于**lv_obj_align**使用相同的参数再次调用。 | ||
+ | |||
如果对象对齐使用的是**lv_obj_align_origo**,则在对象重新对齐时该函数将被再次调用。 | 如果对象对齐使用的是**lv_obj_align_origo**,则在对象重新对齐时该函数将被再次调用。 | ||
函数**lv_obj_align_x/y**和**lv_obj_align_origo_x/y**能够使对象在一个轴线上对齐。如果对象使用了**lv_obj_set_auto_realign(obj, true)**,则对象的大小被**lv_obj_set_width/height/size()**函数改变时,对象将自动重新对齐。当将尺寸动态变化应用于对象并且需要保持原始相对位置时,这非常有用。 | 函数**lv_obj_align_x/y**和**lv_obj_align_origo_x/y**能够使对象在一个轴线上对齐。如果对象使用了**lv_obj_set_auto_realign(obj, true)**,则对象的大小被**lv_obj_set_width/height/size()**函数改变时,对象将自动重新对齐。当将尺寸动态变化应用于对象并且需要保持原始相对位置时,这非常有用。 | ||
**请注意,屏幕的尺寸无法更改。尝试在屏幕上使用这些功能将导致不确定的行为。** | **请注意,屏幕的尺寸无法更改。尝试在屏幕上使用这些功能将导致不确定的行为。** | ||
- | {{ :icore4t:icore4t_rtt_lvgl_5_2.png?direct |}} | + | {{ :icore4t:icore4t_rtt_lvgl_5_2.gif?direct |}} |
* **1.4父类与子类** | * **1.4父类与子类** | ||
行 101: | 行 101: | ||
* **1.5属性** | * **1.5属性** | ||
基础对象有一些属性可以通过以下方式启用/禁用: **lv_obj_set_...(obj, true/false)** | 基础对象有一些属性可以通过以下方式启用/禁用: **lv_obj_set_...(obj, true/false)** | ||
- | * • **hidden**隐藏对象。它不会被绘制,输入设备会将其视为不存在。它的子类也将被隐藏。 | + | * **hidden**隐藏对象。它不会被绘制,输入设备会将其视为不存在。它的子类也将被隐藏。 |
- | * • **click** 允许您通过输入设备单击对象。如果禁用,则单击事件将传递到此事件后面的对象(例如,默认情况下不可点击标签)。 | + | * **click** 允许您通过输入设备单击对象。如果禁用,则单击事件将传递到此事件后面的对象(例如,默认情况下不可点击标签)。 |
- | * • **top** 如果启用,则单击此对象或其任何子级时,该对象将进入前台。 | + | * **top** 如果启用,则单击此对象或其任何子级时,该对象将进入前台。 |
- | * • **drag** 启用拖动(通过输入设备移动)。 | + | * **drag** 启用拖动(通过输入设备移动)。 |
- | * • **drag_dir** 仅在特定方向上启用拖动。(**LV_DRAG_DIR_HOR/VER/ALL** )。 | + | * **drag_dir** 仅在特定方向上启用拖动。(**LV_DRAG_DIR_HOR/VER/ALL** )。 |
- | * • **drag_throw** 通过拖动启用“throwing”,使对象具有动量。 | + | * **drag_throw** 通过拖动启用“throwing”,使对象具有动量。 |
- | * • **drag_parent** 如果启用,则在拖动过程中将移动对象的父对象。看起来就像拖动父级。 | + | * **drag_parent** 如果启用,则在拖动过程中将移动对象的父对象。看起来就像拖动父级。 |
* 使用递归检查,因此也可以传递给父级的父级。 | * 使用递归检查,因此也可以传递给父级的父级。 | ||
- | * • **parent_event** 将事件传播给父母。递归检查,因此也可以传播给祖父母。 | + | * **parent_event** 将事件传播给父母。递归检查,因此也可以传播给祖父母。 |
- | * • **opa_scale_enable** 启用不透明度缩放。 | + | * **opa_scale_enable** 启用不透明度缩放。 |
* **1.6保护** | * **1.6保护** | ||
- | 库中有一些自动发生的特定操作。为防止一种或多种此类行为,您可以保护对象免受它们干扰。使用函数 **lv_obj_set/clear_protect(obj, LV_PROTECT_...)** 设置/清除对象的保护。具体保护措施如下: | + | 库中有一些自动发生的特定操作。为防止一种或多种此类行为,您可以保护对象免受它们干扰。使用函数 **lv_obj_add/clear_protect(obj, LV_PROTECT_...)** 设置/清除对象的保护。具体保护措施如下: |
- | * • **LV_PROTECT_NONE** 没有保护 | + | * **LV_PROTECT_NONE** 没有保护 |
- | * • **LV_PROTECT_POS** 防止自动定位(例如,容器中的布局) | + | * **LV_PROTECT_POS** 防止自动定位(例如,容器中的布局) |
- | * • **LV_PROTECT_FOLLOW** 在自动排列中防止被追随(进行“换行”) | + | * **LV_PROTECT_FOLLOW** 在自动排列中防止被追随(进行“换行”) |
- | * • **LV_PROTECT_PARENT** 防止自动更改父项。 | + | * **LV_PROTECT_PARENT** 防止自动更改父项。 |
- | * • **LV_PROTECT_PRESS_LOST** 当触点滑出对象时,防止丢失触点。(例如,按下某个按钮后,可以滑动触点到按钮外部进行释放) | + | * **LV_PROTECT_PRESS_LOST** 当触点滑出对象时,防止丢失触点。(例如,按下某个按钮后,可以滑动触点到按钮外部进行释放) |
- | * • **LV_PROTECT_CLICK_FOCUS** 如果对象在组中并且启用了单击焦点,则防止其自动 | + | * **LV_PROTECT_CLICK_FOCUS** 如果对象在组中并且启用了单击焦点,则防止其自动 |
* 聚焦。 | * 聚焦。 | ||
- | * • **LV_PROTECT_CHILD_CHG** 禁用子类更改信号。库内部使用。 | + | * **LV_PROTECT_CHILD_CHG** 禁用子类更改信号。库内部使用。 |
* **1.7扩展点击区域** | * **1.7扩展点击区域** | ||
默认情况下,用户只能在该对象的对应区域上单击该对象,但是用户可以使用**lv_obj_set_ext_click_area(obj, left, right, top, bottom)**来扩展该区域。 参数**left/right/top/bottom**描述可点击区域在每个方向上超出默认设置的范围。 | 默认情况下,用户只能在该对象的对应区域上单击该对象,但是用户可以使用**lv_obj_set_ext_click_area(obj, left, right, top, bottom)**来扩展该区域。 参数**left/right/top/bottom**描述可点击区域在每个方向上超出默认设置的范围。 | ||
不过这个特性需要在 lv_conf.h 中使能 **LV_USE_EXT_CLICK_AREA**。可能的值为: | 不过这个特性需要在 lv_conf.h 中使能 **LV_USE_EXT_CLICK_AREA**。可能的值为: | ||
- | * • **LV_EXT_CLICK_AREA_FULL** 将所有 4 个坐标存储为 lv_coord_t | + | * **LV_EXT_CLICK_AREA_FULL** 将所有 4 个坐标存储为 lv_coord_t |
- | * • **LV_EXT_CLICK_AREA_TINY** 仅将水平和垂直坐标(使用**eft/right和top/bottom**中较大的值)存储为 uint8_t | + | * **LV_EXT_CLICK_AREA_TINY** 仅将水平和垂直坐标(使用**eft/right和top/bottom**中较大的值)存储为 uint8_t |
- | * • **LV_EXT_CLICK_AREA_OFF** 禁用此特性 | + | * **LV_EXT_CLICK_AREA_OFF** 禁用此特性 |
==== 二、相关特性 ==== | ==== 二、相关特性 ==== | ||
行 135: | 行 135: | ||
* **2.1屏幕** | * **2.1屏幕** | ||
使用函数**lv_obj_t * screen = lv_obj_create(NULL, NULL)**可以创建新屏幕,调用**lv_scr_load(screen)**来加载新屏幕。而函数**lv_scr_act()**可以返回当前活动屏幕的指针。 | 使用函数**lv_obj_t * screen = lv_obj_create(NULL, NULL)**可以创建新屏幕,调用**lv_scr_load(screen)**来加载新屏幕。而函数**lv_scr_act()**可以返回当前活动屏幕的指针。 | ||
+ | |||
若有多个屏幕,则可以使用**lv_disp_set_default**设置默认屏幕。函数**lv_obj_get_screen(obj)**可以获取对象所在的屏幕。 | 若有多个屏幕,则可以使用**lv_disp_set_default**设置默认屏幕。函数**lv_obj_get_screen(obj)**可以获取对象所在的屏幕。 | ||
* **2.2图层** | * **2.2图层** | ||
LVGL有两个自动生成的图层,**顶层、系统层**。它们独立于屏幕,并且将显示在每个屏幕上。顶层是在屏幕上的每个对象的上方,系统层在顶层之上。用户可以将任何弹出窗口自由添加到顶层。但是,系统层仅限于系统级的内容(例如,**lv_indev_set_cursor()**将鼠标光标将放在此处)。 | LVGL有两个自动生成的图层,**顶层、系统层**。它们独立于屏幕,并且将显示在每个屏幕上。顶层是在屏幕上的每个对象的上方,系统层在顶层之上。用户可以将任何弹出窗口自由添加到顶层。但是,系统层仅限于系统级的内容(例如,**lv_indev_set_cursor()**将鼠标光标将放在此处)。 | ||
+ | |||
函数 **lv_layer_top()** 返回一个顶层指针,**lv_layer_sys()** 给出一个到系统层的指针。 | 函数 **lv_layer_top()** 返回一个顶层指针,**lv_layer_sys()** 给出一个到系统层的指针。 | ||
+ | |||
你可以使用**lv_obj_move_foreground(obj)**把一个对象移动到前景图层,使用**lv_obj_move_background(obj)**将它发送到后台。 | 你可以使用**lv_obj_move_foreground(obj)**把一个对象移动到前景图层,使用**lv_obj_move_background(obj)**将它发送到后台。 | ||
* **2.3事件** | * **2.3事件** | ||
要为对象设置事件回调,请使用 **lv_obj_set_event_cb(obj, event_cb)**。 | 要为对象设置事件回调,请使用 **lv_obj_set_event_cb(obj, event_cb)**。 | ||
+ | |||
要将事件手动发送给对象,请使用 **lv_event_send(obj, LV_EVENT_..., data)**。 | 要将事件手动发送给对象,请使用 **lv_event_send(obj, LV_EVENT_..., data)**。 | ||
* **2.4状态** | * **2.4状态** | ||
行 147: | 行 151: | ||
* **2.5样式** | * **2.5样式** | ||
使用**lv_obj_add_style(obj, part, &new_style)**向对象添加样式,基础对象使用所有类似矩形的样式属性。 | 使用**lv_obj_add_style(obj, part, &new_style)**向对象添加样式,基础对象使用所有类似矩形的样式属性。 | ||
+ | |||
要从对象中删除所有样式,请使用 **lv_obj_reset_style_list(obj, part)**。 | 要从对象中删除所有样式,请使用 **lv_obj_reset_style_list(obj, part)**。 | ||
+ | |||
如果修改对象已经使用的样式,则使用**lv_obj_refresh_style(obj)** 刷新每个对象使用的样式,或者使用**lv_obj_report_style_mod(&style)**用给定样式刷新受影响的对象。如果**lv_obj_report_style_mod**的参数为**NULL** ,则将通知所有对象。 | 如果修改对象已经使用的样式,则使用**lv_obj_refresh_style(obj)** 刷新每个对象使用的样式,或者使用**lv_obj_report_style_mod(&style)**用给定样式刷新受影响的对象。如果**lv_obj_report_style_mod**的参数为**NULL** ,则将通知所有对象。 | ||
* **2.6组** | * **2.6组** | ||
一旦使用**lv_group_add_obj(group, obj)**将一个对象添加到组中,则可以使用**lv_obj_get_group(obj)**来获取该对象的当前组。 | 一旦使用**lv_group_add_obj(group, obj)**将一个对象添加到组中,则可以使用**lv_obj_get_group(obj)**来获取该对象的当前组。 | ||
+ | |||
函数**lv_obj_is_focused(obj)**可以知道该对象当前是否在其组上。如果该对象未添加到组中,则返回**false**。 | 函数**lv_obj_is_focused(obj)**可以知道该对象当前是否在其组上。如果该对象未添加到组中,则返回**false**。 |