1.宽度自适应
可以通过lv_font_get_glyph_width
获取字体文件的宽度,当textarea的文本变换时获取对应字符串计算字符个数,设置宽度即可动态变化
static void my_textarea_event_handler(lv_event_t* e)
{
lv_obj_t* ta = lv_event_get_target(e);
LV_LOG_USER("Enter was pressed. The current text is: %s", lv_textarea_get_text(ta));
int num = getCharacterCount(lv_textarea_get_text(ta));
// 中文字符
wchar_t chineseChar = L'这';
// 获取Unicode码点
wint_t unicodeCodePoint = chineseChar;
// 打印Unicode码点
printf("中文字符 '%lc' 的Unicode码点是 U+%04X\n", chineseChar, unicodeCodePoint);
int w = lv_font_get_glyph_width(&MyFontNormal15, 0x8FD9, 0x662F);
printf("w:%d\n", w);
lv_obj_set_width(ta, w * num);
//lv_obj_get_style_text_font()
}
2.行间距
lvgl textarea的行间距为0时,两行文本并不会紧挨着,而是隔了一个字符宽度,此特性不确定,只是通过现象猜的。
所以为了文本紧凑,可以这样设置行间距
lv_font_t* t = lv_obj_get_style_text_font(ta, LV_PART_MAIN);
int w = lv_font_get_glyph_width(t, 0x8FD9, 0x662F);
printf("w:%d\n", w);
lv_obj_set_style_text_line_space(ta, -w, LV_PART_MAIN);
printf("h:%d\n", lv_font_get_line_height(t));