lvgl显示中文和自定义图标

lvgl显示中文和自定义图标

显示中文

制作字库

lvgl字库在线制作网址 https://lvgl.io/tools/fontconverter

下面以制作 “按钮” 这两个汉字字库为例

  • 首先选择一个字体文件 可以在网上找,也可以去电脑 C:\Windows\Fonts 里挑一个顺眼的
  • 确定要转换的字符

在这里插入图片描述
然后就会生成一个字库.c文件,将该文件添加到工程中,然后如下调用显示

void lv_example_label(void)
{
    lv_obj_t * label1 = lv_label_create(lv_scr_act());
    
    //声明字库
    LV_FONT_DECLARE(zhongwen);
    
    //设置字库
    lv_obj_set_style_text_font(label1, &zhongwen, 0);
    
    lv_label_set_text(label1, "按钮");
}

需要注意的是 生成的字库 只支持utf-8编码,例如你要制作一个 汉字 ‘按钮’ 的字库,制作字库的时候会将 ‘按’的 utf-8 码 和 制作出来的字库相关联,可以通过 ‘按’的 utf-8 码 在字库中找到对应的显示矩阵,如果 你的工程文件不是utf-8 编码,显示汉字就会出问题,可以使用notepad++ 打开文件将文件转化位utf-8格式。
在这里插入图片描述

显示自定义图标

显示图标

在这里插入图片描述
lvgl中自带了一些常用图标,可以像显示文字一样显示图标

void lv_example_label_2(void)
{
    lv_obj_t * label1 = lv_label_create(lv_scr_act());
    
    //显示图标
    lv_label_set_text(label1, LV_SYMBOL_AUDIO "123");
}

在这里插入图片描述
自带的图标很好用,但是有一个问题,如果想要显示汉字+图标,就会发现图标显示不出来了,因为制作的汉字字库中没有图标。这时候可以使用两个label,一个显示图标,一个显示汉字,也可以在制作汉字字库时将图标添加进去。

制作字库

  • 打开登录阿里巴巴矢量库

  • 选择喜欢的图标加入购物车,添加到项目
    在这里插入图片描述
    在这里插入图片描述

  • 打包下载图库
    在这里插入图片描述

  • 将图标添加到字库中
    在这里插入图片描述
    在这里插入图片描述

  • 显示汉字+图标

#define MY_ICON_WIFI  "\xEE\x99\x88"
void lv_example_label_2(void)
{
    lv_obj_t * label1 = lv_label_create(lv_scr_act());
    
    //声明字库
    LV_FONT_DECLARE(zhongwen);
    
    //设置字库
    lv_obj_set_style_text_font(label1, &zhongwen, 0);
    
    //显示汉字+图标
    lv_label_set_text(label1, MY_ICON_WIFI "按钮");
}

在这里插入图片描述

需要注意的是 图标的unicode 码 为 0xe648, 但是在工程中需要使用utf-8码 \xEE\x99\x88, 需要将Unicode转换为utf-8.

unicode 转 utf-8

unicode 转 utf-8 十分简单,下面是c#的代码和小工具
在这里插入图片描述

private void btnConvert_Click(object sender, EventArgs e)
{
    string str = txbS.Text;
    //剔除空格
    string strNoSpace = str.Replace(" ", "");

    byte[] bytes = new byte[2];


    bytes[1] = Convert.ToByte(strNoSpace.Trim().Substring(0, 2), 16);
    bytes[0] = Convert.ToByte(strNoSpace.Trim().Substring(2, 2), 16);

    txbD.Text = System.Text.Encoding.Unicode.GetString(bytes);

    byte[] utf8 = Encoding.UTF8.GetBytes(txbD.Text);
    string s3 = ""; 
    foreach (byte b in utf8)
    {
        // s3 += Convert.ToString(b, 16) + " ";
        s3 += string.Format("{0:X2}", b) + " ";

    }
    txbD.Text = s3;

}
  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
LVGL 中,可以使用 lv_keyboard_create 函数创建一个键盘对象,并使用 lv_keyboard_set_map 函数设置键盘的按键映射。按键映射是一个二维数组,其中每个元素表示一个按键,可以自定义按键的标签、宽度、高度、样式等属性。 以下是一个简单的示例代码,演示如何创建一个带有自定义按键的键盘: ```c // 定义按键映射 static const char *kb_map[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", LV_SYMBOL_BACKSPACE, "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_KEYBOARD, "z", "x", "c", "v", "b", "n", "m", ",", ".", "?", LV_SYMBOL_OK, LV_SYMBOL_CLOSE, "" }; // 创建键盘对象 lv_obj_t *kb = lv_keyboard_create(lv_scr_act(), NULL); // 设置按键映射 lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_TEXT_LOWER, kb_map); // 设置自定义按键样式 lv_style_t style_btn_rel; lv_style_t style_btn_pr; lv_style_copy(&style_btn_rel, &lv_style_btn_rel); lv_style_copy(&style_btn_pr, &lv_style_btn_pr); style_btn_rel.body.main_color = LV_COLOR_GRAY; style_btn_rel.body.grad_color = LV_COLOR_GRAY; style_btn_pr.body.main_color = LV_COLOR_BLUE; style_btn_pr.body.grad_color = LV_COLOR_BLUE; style_btn_pr.text.color = LV_COLOR_WHITE; lv_keyboard_set_style(kb, LV_KEYBOARD_STYLE_BTN_REL, &style_btn_rel); lv_keyboard_set_style(kb, LV_KEYBOARD_STYLE_BTN_PR, &style_btn_pr); // 添加自定义按键 lv_keyboard_add_text(kb, "Enter", strlen("Enter"), NULL); ``` 在上述代码中,首先定义了一个按键映射 kb_map,其中包含了常见的字母、数字、符号等按键,以及两个 LVGL 的符号图标,分别表示退格和确定。然后创建了一个键盘对象 kb,并使用 lv_keyboard_set_map 函数设置了按键映射。接着使用 lv_keyboard_set_style 函数设置了按键的样式,包括材质、颜色、字体等属性。最后使用 lv_keyboard_add_text 函数添加了一个自定义按键,其标签为 "Enter",长度为 strlen("Enter"),样式为默认样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值