lv_textarea_create
此函数用于创建一个文本区域- lv_obj_t *lv_textarea_create(lv_obj_t *parent)
- //parent:其父对象的指针
- //ret:返回创建的文本区域的句柄
复制代码 lv_textarea_add_char
用于向文本区域(lv_textarea)中添加单个字符的函数。此函数通常用于实现键盘输入或其他字符输入功能- void lv_textarea_add_char(lv_obj_t * ta, char c);
- //ta:指向文本区域对象的指针
- //c:要添加的字符
复制代码 lv_textarea_add_text
用于向文本区域(lv_textarea)中添加文本的函数- void lv_textarea_add_text(lv_obj_t * ta, const char * txt);
- //ta:指向文本区域对象的指针
- //txt:要添加的文本内容。这是一个以 \0 结尾的字符串
复制代码 lv_textarea_del_char
用于从文本区域(lv_textarea)中删除一个字符的函数.删除文本区域中光标前的一个字符。如果光标位于文本开头,则不会删除任何字符- void lv_textarea_del_char(lv_obj_t * ta);
- //ta:指向文本区域对象的指针
复制代码 lv_textarea_del_char_forward
用于删除文本区域(lv_textarea)中光标右侧字符.删除文本区域中光标右侧的一个字符。如果光标位于文本末尾,则不会删除任何字符- void lv_textarea_del_char_forward(lv_obj_t * ta);
- //ta:指向文本区域对象的指针
复制代码 lv_textarea_set_text
用于设置文本区域(lv_textarea)内容的函数。通过此函数,可以一次性设置文本区域的全部文本内容,覆盖之前的文本。- void lv_textarea_set_text(lv_obj_t * ta, const char * txt);
- //ta:指向文本区域对象的指针
- //txt:要设置的文本内容。这是一个以 \0 结尾的字符串
复制代码 lv_textarea_set_placeholder_text
用于设置文本区域(lv_textarea)占位符文本的函数。占位符文本是在文本区域为空时显示的提示文本,通常用于提示用户输入内容的格式或说明。- void lv_textarea_set_placeholder_text(lv_obj_t * ta, const char * txt);
- //ta:指向文本区域对象的指针
- //txt:要设置的占位符文本内容。这是一个以 \0 结尾的字符串
复制代码 lv_textarea_set_cursor_pos
用于设置文本区域(lv_textarea)光标位置的函数- void lv_textarea_set_cursor_pos(lv_obj_t * ta, uint32_t pos);
- //ta:指向文本区域对象的指针
- //pos:光标的新位置,从 0 开始计数。例如,0 表示光标位于文本开头,1 表示光标位于第一个字符之后
复制代码 lv_textarea_set_cursor_click_pos
用于启用或禁用通过点击文本区域来定位光标的功能的函数。当启用此功能时,用户点击文本区域的任意位置,光标会跳转到点击的位置- void lv_textarea_set_cursor_click_pos(lv_obj_t * ta, bool en);
- //ta:指向文本区域对象的指针
- //en:布尔值,用于启用或禁用点击定位光标的功能.true:启用点击定位光标的功能。false:禁用点击定位光标的功能。
复制代码 lv_textarea_set_password_mode
用于启用或禁用文本区域(lv_textarea)的密码模式的函数。在密码模式下,输入的字符会被隐藏,通常显示为星号(*)或其他指定的字符,以保护用户输入的敏感信息。- void lv_textarea_set_password_mode(lv_obj_t * ta, bool en);
- //ta:指向文本区域对象的指针
- //en:布尔值,用于启用或禁用密码模式:true:启用密码模式。false:禁用密码模式。
复制代码 lv_textarea_set_password_bullet
用于设置文本区域(lv_textarea)密码模式下隐藏字符的函数。在密码模式下,输入的字符会被隐藏,通常显示为星号(*)或其他指定的字符- void lv_textarea_set_password_bullet(lv_obj_t * ta, const char * bullet);
- //ta:指向文本区域对象的指针
- //bullet:用于隐藏输入字符的字符。通常是一个单字符字符串,例如 "*" 或 "•"
复制代码- #include "lvgl.h"
- void setup_textarea(void) {
- // 创建一个文本区域对象
- lv_obj_t * ta = lv_textarea_create(lv_scr_act());
- // 设置文本区域的大小和位置
- lv_obj_set_size(ta, 240, 100);
- lv_obj_align(ta, NULL, LV_ALIGN_CENTER, 0, 0);
- // 启用密码模式
- lv_textarea_set_password_mode(ta, true);
- // 设置密码模式下的隐藏字符为 "•"
- lv_textarea_set_password_bullet(ta, "•");
- }
复制代码 lv_textarea_set_one_line
用于设置文本区域(lv_textarea)是否为单行模式的函数。在单行模式下,文本区域不会自动换行,用户输入的文本会一直延伸到文本区域的右侧边界。- void lv_textarea_set_one_line(lv_obj_t * ta, bool en);
- //ta:指向文本区域对象的指针
- //en:布尔值,用于启用或禁用单行模式:true:启用单行模式。false:禁用单行模式(允许多行)。
复制代码 lv_textarea_set_accepted_chars
用于设置文本区域(lv_textarea)允许输入的字符集的函数。通过此函数,可以限制用户只能输入特定的字符,从而实现更灵活的输入控制- void lv_textarea_set_accepted_chars(lv_obj_t * ta, const char * accepted);
- //ta:指向文本区域对象的指针
- //accepted:一个以 \0 结尾的字符串,包含允许输入的字符。例如,"0123456789" 表示只允许输入数字。
复制代码 lv_textarea_set_max_length
用于设置文本区域(lv_textarea)最大字符数的函数- void lv_textarea_set_max_length(lv_obj_t * ta, uint16_t length);
- //ta:指向文本区域对象的指针
- //length:允许的最大字符数
复制代码 lv_textarea_set_insert_replace
用于在文本区域(lv_textarea)的 LV_EVENT_INSERT 事件中替换即将插入的文本的函数。此函数允许在用户尝试插入文本时,用另一段文本替换即将插入的内容。- void lv_textarea_set_insert_replace(lv_obj_t * ta, const char * txt);
- //ta:指向文本区域对象的指针
- //txt:要插入的新文本。如果设置为 "",则不会插入任何内容
复制代码- void event_cb(lv_event_t * e) {
- lv_obj_t * ta = lv_event_get_target(e);
- if(lv_event_get_code(e) == LV_EVENT_INSERT) {
- // 替换即将插入的文本
- lv_textarea_set_insert_replace(ta, "New text");
- }
- }
- void setup_textarea(void) {
- // 创建一个文本区域对象
- lv_obj_t * ta = lv_textarea_create(lv_scr_act());
- // 设置文本区域的大小和位置
- lv_obj_set_size(ta, 240, 100);
- lv_obj_align(ta, NULL, LV_ALIGN_CENTER, 0, 0);
- // 添加事件回调
- lv_obj_add_event_cb(ta, event_cb, LV_EVENT_INSERT, NULL);
- }
复制代码 lv_textarea_set_text_selection
用于启用或禁用文本区域(lv_textarea)文本选择功能的函数。启用此功能后,用户可以通过鼠标或触摸操作选择文本区域中的任意部分- void lv_textarea_set_text_selection(lv_obj_t * ta, bool en);
- //ta:指向文本区域对象的指针
- //en:布尔值,用于启用或禁用文本选择功能:true:启用文本选择功能。false:禁用文本选择功能
复制代码 lv_textarea_set_password_show_time
用于设置密码字段明文显示时间- void lv_textarea_set_password_show_time(lv_obj_t * ta, uint16_t time);
- //ta: 文本区域对象指针
- //time: 密码显示时间(毫秒):0:永久隐藏密码(立即显示为掩码)>0:密码显示指定时间后隐藏
复制代码 lv_textarea_set_align
用于设置文本区域(lv_textarea)中文本对齐方式- void lv_textarea_set_align(lv_obj_t * ta, lv_label_align_t align);
- //ta:指向文本区域对象的指针
- //align:文本对齐方式
- /*
- LV_LABEL_ALIGN_LEFT:文本左对齐。
- LV_LABEL_ALIGN_CENTER:文本居中对齐。
- LV_LABEL_ALIGN_RIGHT:文本右对齐。
- LV_LABEL_ALIGN_AUTO:自动对齐(根据文本方向自动选择对齐方式)
- */
复制代码 lv_textarea_get_text
用于获取文本区域(lv_textarea)当前文本内容的函数,可以查询文本区域中用户输入或设置的文本- const char * lv_textarea_get_text(const lv_obj_t * ta);
- //ta:指向文本区域对象的指针
- //ret:返回一个指向文本区域当前文本内容的字符串。返回的字符串是内部存储的文本,因此不需要手动释放。
复制代码 lv_textarea_get_placeholder_text
用于获取文本输入框(lv_textarea)中设置的占位符文本- const char *lv_textarea_get_placeholder_text(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回一个指向占位符文本的常量字符串指针。如果未设置占位符文本,则返回 NULL
复制代码 lv_textarea_get_label
获取文本输入框(lv_textarea)内部的标签(lv_label)对象指针。这里的标签对象,承担着显示文本输入框中用户输入内容或者占位符文本的任务。- lv_obj_t *lv_textarea_get_label(const lv_obj_t *ta);
- //ta:该参数为指向文本输入框对象的指针
- //ret:函数会返回一个指向文本输入框内部标签对象的指针
复制代码 lv_textarea_get_cursor_pos
用于获取文本输入框(lv_textarea)中光标的当前位置- uint16_t lv_textarea_get_cursor_pos(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回光标的当前位置,类型为 uint16_t 当文本为空时,光标位置为 0。
- 当光标位于文本末尾时,返回值等于文本长度
复制代码 lv_textarea_get_cursor_click_pos
获取是否启用光标点击定位- bool lv_textarea_get_cursor_click_pos(lv_obj_t *obj)
- //ta:指向目标文本输入框对象的指针
- //ret:true:启用点击定位 false:禁用
复制代码 lv_textarea_get_password_mode
用于检查文本输入框(lv_textarea)是否启用了密码模式- bool lv_textarea_get_password_mode(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回一个布尔值:true:表示文本输入框已启用密码模式。false:表示文本输入框未启用密码模式(即普通文本模式)
复制代码 lv_textarea_get_password_bullet
用于获取文本输入框在密码模式下显示的掩码字符- const char lv_textarea_get_password_bullet(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回当前设置的密码掩码字符,类型为 char
复制代码 lv_textarea_get_one_line
用于检查文本输入框(lv_textarea)是否被设置为单行模式- bool lv_textarea_get_one_line(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //返回一个布尔值:true:表示文本输入框处于单行模式。false:表示文本输入框处于多行模式(默认)
复制代码 lv_textarea_get_accepted_chars
用于获取文本输入框(lv_textarea)允许输入的字符集。通过限制可输入的字符范围,可以实现诸如数字输入框、字母输入框等功能。- const char *lv_textarea_get_accepted_chars(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回一个指向允许输入字符集的常量字符串指针。如果未设置接受的字符集(即允许所有字符),则返回 NULL
复制代码 lv_textarea_get_max_length
用于获取文本输入框(lv_textarea)允许输入的最大字符长度限制- uint16_t lv_textarea_get_max_length(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //ret:返回当前设置的最大字符长度,类型为 uint16_t。如果未设置最大长度限制(默认情况),则返回 LV_TEXTAREA_MAX_LENGTH_INFINITE(通常为 0xFFFF)
复制代码 lv_textarea_text_is_selected
用于检查文本输入框(lv_textarea)中是否有文本被选中。当用户通过长按或拖动操作选中文本时,可以使用此函数判断并执行相应操作(如复制、剪切等)- bool lv_textarea_text_is_selected(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //返回一个布尔值:true:表示文本输入框中有文本被选中。false:表示没有文本被选中(或选中范围为空)
复制代码 lv_textarea_get_text_selection
判断选择模式是否使能- bool lv_textarea_get_text_selection(lv_obj_t *obj)
- //obj:指向目标文本输入框对象的指针
- //ret:true:选择模式使能 false:选择模式未使能
复制代码 lv_textarea_get_password_show_time
用于获取文本输入框在密码模式下显示真实字符的持续时间- uint16_t lv_textarea_get_password_show_time(const lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
- //返回密码模式下真实字符的显示时间,单位为毫秒(ms),类型为 uint16_t
复制代码 lv_textarea_clear_selection
用于清除文本输入框(lv_textarea)中当前选中的文本区域- void lv_textarea_clear_selection(lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
复制代码 lv_textarea_cursor_right
用于将文本输入框(lv_textarea)中的光标向右移动一个字符位置- void lv_textarea_cursor_right(lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
复制代码 lv_textarea_cursor_left
用于将文本输入框(lv_textarea)中的光标向左移动一个字符位置- void lv_textarea_cursor_left(lv_obj_t *ta);
- //ta:指向目标文本输入框对象的指针
复制代码 lv_textarea_cursor_down
用于将文本输入框(lv_textarea)中的光标向下移动一行lv_textarea_cursor_up
用于将文本输入框(lv_textarea)中的光标向上移动一行- // 文本输入框事件回调函数声明
- static void ta_event_cb(lv_event_t * e);
- // 全局键盘对象指针
- static lv_obj_t * kb;
- // 创建文本输入框和键盘示例
- void lv_example_textarea_2(void)
- {
- /*创建密码输入框*/
- lv_obj_t * pwd_ta = lv_textarea_create(lv_scr_act()); // 创建文本输入框对象
- lv_textarea_set_text(pwd_ta, ""); // 清空初始文本
- lv_textarea_set_password_mode(pwd_ta, true); // 启用密码模式(显示掩码)
- lv_textarea_set_one_line(pwd_ta, true); // 设置为单行模式
- lv_obj_set_width(pwd_ta, lv_pct(40)); // 宽度为屏幕的40%
- lv_obj_set_pos(pwd_ta, 5, 20); // 位置:x=5, y=20
- lv_obj_add_event_cb(pwd_ta, ta_event_cb, LV_EVENT_ALL, NULL); // 添加事件回调
- /*创建密码标签并定位到输入框上方*/
- lv_obj_t * pwd_label = lv_label_create(lv_scr_act());
- lv_label_set_text(pwd_label, "Password:");
- lv_obj_align_to(pwd_label, pwd_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0); // 对齐到输入框顶部
- /*创建单行文本输入框*/
- lv_obj_t * text_ta = lv_textarea_create(lv_scr_act());
- lv_textarea_set_one_line(text_ta, true); // 设置为单行模式
- lv_textarea_set_password_mode(text_ta, false); // 禁用密码模式(显示明文)
- lv_obj_set_width(text_ta, lv_pct(40)); // 宽度为屏幕的40%
- lv_obj_add_event_cb(text_ta, ta_event_cb, LV_EVENT_ALL, NULL); // 添加事件回调
- lv_obj_align(text_ta, LV_ALIGN_TOP_RIGHT, -5, 20); // 对齐到屏幕右上角
- /*创建文本标签并定位到输入框上方*/
- lv_obj_t * oneline_label = lv_label_create(lv_scr_act());
- lv_label_set_text(oneline_label, "Text:");
- lv_obj_align_to(oneline_label, text_ta, LV_ALIGN_OUT_TOP_LEFT, 0, 0); // 对齐到输入框顶部
- /*创建键盘对象*/
- kb = lv_keyboard_create(lv_scr_act());
- lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2); // 键盘大小:宽度为屏幕宽度,高度为屏幕高度的一半
- lv_keyboard_set_textarea(kb, pwd_ta); // 初始关联密码输入框
- }
- // 文本输入框事件处理回调函数
- static void ta_event_cb(lv_event_t * e)
- {
- lv_event_code_t code = lv_event_get_code(e); // 获取事件类型
- lv_obj_t * ta = lv_event_get_target(e); // 获取触发事件的对象
-
- // 处理点击或聚焦事件
- if(code == LV_EVENT_CLICKED || code == LV_EVENT_FOCUSED) {
- /*当输入框被点击或聚焦时,将键盘关联到该输入框*/
- if(kb != NULL) lv_keyboard_set_textarea(kb, ta);
- }
- // 处理"完成"事件(通常是按下回车键)
- else if(code == LV_EVENT_READY) {
- // 打印当前输入框中的文本
- LV_LOG_USER("Ready, current text: %s", lv_textarea_get_text(ta));
- }
- }
复制代码 [code]/** * 自动格式化文本为时钟显示样式的示例 * 例如:输入数字时自动添加冒号,形成"HH:MM"格式 */#include "../../lv_examples.h"#if LV_USE_TEXTAREA && LV_USE_KEYBOARD && LV_BUILD_EXAMPLES// 文本输入框事件回调函数声明static void ta_event_cb(lv_event_t * e);// 全局键盘对象指针static lv_obj_t * kb;/** * 创建自动格式化时钟样式的文本输入框示例 */void lv_example_textarea_3(void){ /*创建文本输入框*/ lv_obj_t * ta = lv_textarea_create(lv_scr_act()); // 创建文本输入框对象 lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_VALUE_CHANGED, NULL); // 添加值改变事件回调 lv_textarea_set_accepted_chars(ta, "0123456789:"); // 限制只能输入数字和冒号 lv_textarea_set_max_length(ta, 5); // 最大长度为5个字符(例如"12:34") lv_textarea_set_one_line(ta, true); // 设置为单行模式 lv_textarea_set_text(ta, ""); // 清空初始文本 /*创建键盘*/ kb = lv_keyboard_create(lv_scr_act()); // 创建键盘对象 lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2); // 设置键盘大小 lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER); // 设置为数字键盘模式 lv_keyboard_set_textarea(kb, ta); // 将键盘关联到文本输入框}/** * 文本输入框事件回调函数 * 处理文本内容变化,自动添加冒号格式化时间 */static void ta_event_cb(lv_event_t * e){ lv_obj_t * ta = lv_event_get_target(e); // 获取触发事件的文本输入框对象 const char * txt = lv_textarea_get_text(ta); // 获取当前文本内容 // 检查是否满足添加冒号的条件: // 1. 前两个字符是数字 // 2. 第三个字符不是冒号 if(txt[0] >= '0' && txt[0] = '0' && txt[1] |