梁宁 发表于 2025-6-16 19:12:49

LVGL-文本区域

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:返回一个指向占位符文本的常量字符串指针。如果未设置占位符文本,则返回 NULLlv_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:返回当前设置的密码掩码字符,类型为 charlv_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:返回一个指向允许输入字符集的常量字符串指针。如果未设置接受的字符集(即允许所有字符),则返回 NULLlv_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_tlv_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)中的光标向下移动一行
//ta:指向目标文本输入框对象的指针lv_textarea_cursor_up

用于将文本输入框(lv_textarea)中的光标向上移动一行
//ta:指向目标文本输入框对象的指针// 文本输入框事件回调函数声明
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));
    }
}/** * 自动格式化文本为时钟显示样式的示例 * 例如:输入数字时自动添加冒号,形成"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' && txt = '0' && txt
页: [1]
查看完整版本: LVGL-文本区域