LVGL『Roller滚轮控件』介绍

一. LVGL GUI滚轮控件的概念

Roller 允许您通过滚动简单地从多个选项中选择一个选项。

二. LVGL GUI滚轮小部件和样式

滚轮的主要部分称为 LV_ROLLER_PART_BG 。它是一个矩形,并使用所有典型的背景属性。Roller标签的样式继承自背景的文本样式属性。要调整选项之间的间距,请使用 text_line_space 样式属
性。该填充样式属性设置两侧的空间。中间的选定选项可通过 LV_ROLLER_PART_SELECTED 虚拟小部件引用。除了典型的背景属性外,它还
使用文本属性来更改所选区域中文本的外观。

三. LVGL GUI滚轮控件的使用

1. 设置选项(Set options)

通过这个函数来设置滚动条的选项lv_roller_set_options(roller, options, LV_ROLLER_MODE_NORMAL/INFINITE)

通过这个函数来设置选择的选项lv_roller_set_selected(roller, id, LV_ANIM_ON/OFF)

写个程序验证下:可以看到id5就是June

void lvgl_roller_set_option_test(void)
{
    lv_obj_t* roller1 = lv_roller_create(lv_scr_act(), NULL);
    lv_roller_set_options(roller1,
        "January\n"
        "February\n"
        "March\n"
        "April\n"
        "May\n"
        "June\n"
        "July\n"
        "August\n"
        "September\n"
        "October\n"
        "November\n"
        "December",
        LV_ROLLER_MODE_INFINITE);
    lv_obj_align(roller1, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_roller_set_selected(roller1, 5, LV_ANIM_ON);
}

2. 获取当前选项(Get selected option)

用这个函数来获取当前选项的ID,lv_roller_get_selected(roller)

用这个选项来获取当前选项的文本字符串,lv_roller_get_selected_str(roller, buf, buf_size)

此部分我们不写代码了,跟Event一起写!

3. 对齐选项(Align the options)

用这个函数来设置选项的对齐方式lv_roller_set_align(roller, LV_LABEL_ALIGN_LEFT/CENTER/RIGHT)

4. 可见行(Visible rows)

用这个函数来设置滚轮控件显示的行数lv_roller_set_visible_row_count(roller, num)

我们来写一个测试一下,创建两个滚轮控件,一个是默认的,一个设置为可见10行

void lvgl_roller_visible_raw_test(void)
{
    lv_obj_t* roller1 = lv_roller_create(lv_scr_act(), NULL);
    lv_roller_set_options(roller1,
        "January\n"
        "February\n"
        "March\n"
        "April\n"
        "May\n"
        "June\n"
        "July\n"
        "August\n"
        "September\n"
        "October\n"
        "November\n"
        "December",
        LV_ROLLER_MODE_INFINITE);
    lv_obj_align(roller1, NULL, LV_ALIGN_CENTER, -100, -200);

    lv_obj_t* roller2 = lv_roller_create(lv_scr_act(), NULL);
    lv_roller_set_options(roller2,
        "January\n"
        "February\n"
        "March\n"
        "April\n"
        "May\n"
        "June\n"
        "July\n"
        "August\n"
        "September\n"
        "October\n"
        "November\n"
        "December",
        LV_ROLLER_MODE_INFINITE);
    lv_obj_align(roller2, NULL, LV_ALIGN_CENTER, 100, -200);
    lv_roller_set_visible_row_count(roller2,10);
}

5. 动画时间(Animation time)

用这个函数来设置动画时间lv_roller_set_anim_time(roller, anim_time)

6. 事件(Event)

除了通用事件外,滚轮控件还有以下特殊事件

LV_EVENT_VALUE_CHANGED sent when a new option is selected

我们写个程序结合获取当前选项来看下

static void roller_event_test_handler(lv_obj_t* obj, lv_event_t event)
{
    if (event == LV_EVENT_VALUE_CHANGED) {
        char buf[32];
        lv_roller_get_selected_str(obj, buf, sizeof(buf));
        printf("Selected month: ID:%d Text:%s\n", lv_roller_get_selected(obj), buf);
    }
}


void lvgl_roller_event_test(void)
{
    lv_obj_t* roller1 = lv_roller_create(lv_scr_act(), NULL);
    lv_roller_set_options(roller1,
        "January\n"
        "February\n"
        "March\n"
        "April\n"
        "May\n"
        "June\n"
        "July\n"
        "August\n"
        "September\n"
        "October\n"
        "November\n"
        "December",
        LV_ROLLER_MODE_INFINITE);

    lv_roller_set_visible_row_count(roller1, 4);
    lv_obj_align(roller1, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_event_cb(roller1, roller_event_test_handler);
}

好了,完结了,更多精彩继续戳↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

<think>好的,我需要解决用户的问题:如何在LVGL中取消textarea的滚动条。首先,我得回忆一下LVGL中textarea和滚动条的相关知识。 用户提到的是textarea组件,而滚动条通常是其父容器,比如scrollview的一部分,或者可能是textarea自身启用了滚动。需要确定是哪种情况。首先,检查textarea是否被放在一个可滚动的容器里,比如lv_scrollview。如果是的话,可能需要调整父容器的滚动设置。 如果textarea本身有滚动条,那可能是其样式或属性设置的问题。在LVGL中,滚动条通常与对象的滚动模式有关。textarea默认情况下如果内容超出范围可能会自动显示滚动条,这取决于LVGL的版本和配置。 接下来,我需要考虑如何禁用滚动条。可能的解决方法包括设置滚动条模式为关闭。查看LVGL的文档,发现可以通过lv_obj_set_scrollbar_mode函数来设置滚动条的显示模式。将该函数设置为LV_SCROLLBAR_MODE_OFF应该可以隐藏滚动条。 但要注意,如果textarea的内容过长,禁用滚动条可能导致内容无法滚动查看。用户可能需要其他方式来处理内容溢出,比如调整文本框的大小或确保内容适应文本框的尺寸。 另外,还要确认是否确实是对textarea对象本身设置,还是其父容器。如果父容器有滚动条,可能需要修改父容器的滚动设置。 总结步骤应该是:确定滚动条来源,然后使用相应的API关闭滚动条显示。例如,对textarea对象调用lv_obj_set_scrollbar_mode(textarea, LV_SCROLLBAR_MODE_OFF)。同时提醒用户注意内容溢出的情况。 最后,确保给出的代码示例正确,并适用于用户使用的LVGL版本(如v8或v9可能存在差异)。如果用户遇到问题,建议检查版本或查阅对应版本的文档。</think>在 LVGL 中取消 `textarea` 组件的滚动条,需通过调整其**滚动模式**和**父容器属性**实现。以下是详细步骤: --- ### 方法一:直接禁用 textarea 的滚动条 若 `textarea` 自身启用了滚动条,可通过以下代码关闭: ```c lv_obj_set_scrollbar_mode(your_textarea, LV_SCROLLBAR_MODE_OFF); ``` - **关键参数**: - `LV_SCROLLBAR_MODE_OFF`: 完全隐藏滚动条 - `LV_SCROLLBAR_MODE_AUTO`: 仅在需要时显示(默认) - `LV_SCROLLBAR_MODE_ON`: 强制显示滚动条 --- ### 方法二:通过父容器控制滚动 若 `textarea` 被放置在可滚动容器(如 `lv_scrollview`)中,需修改父容器的属性: ```c lv_obj_set_scrollbar_mode(parent_container, LV_SCROLLBAR_MODE_OFF); ``` --- ### 注意事项 1. **内容溢出风险**:关闭滚动条后,若文本内容超出 `textarea` 的尺寸,用户将无法通过滚动查看隐藏内容。需确保文本框尺寸足够或动态调整内容长度。 2. **版本兼容性**: - LVGL v8.x 及以上版本使用 `lv_obj_set_scrollbar_mode` - LVGL v7.x 需使用 `lv_page_set_scrollbar_mode`(如果 `textarea` 在 `lv_page` 内) --- ### 完整示例 ```c // 创建 textarea lv_obj_t* textarea = lv_textarea_create(lv_scr_act()); lv_textarea_set_text(textarea, "长文本内容..."); // 禁用滚动条 lv_obj_set_scrollbar_mode(textarea, LV_SCROLLBAR_MODE_OFF); // 调整尺寸以适应内容(可选) lv_obj_set_size(textarea, 200, 100); // 确保足够空间 ``` --- ### 扩展建议 - 若需自定义滚动行为,可结合 `LV_EVENT_SCROLL` 事件手动控制滚动位置。 - 使用 `lv_label` 替代 `textarea` 若不需要编辑功能,可避免滚动条问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wireless_Link

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值