LVGL8学习之扩展当前主题(Extending the current theme)

这篇博客介绍了如何在LVGL图形库中创建并应用新的主题。通过定义和初始化样式,然后在现有主题基础上添加新样式,实现了按钮背景颜色和边框的定制。`new_theme_apply_cb`函数用于在对象上应用新样式,`new_theme_init_and_set`函数用于设置和显示新主题。最终,通过示例展示了如何创建两个按钮,分别使用原始主题和新主题,突出展示了主题切换的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一篇来学习一下如何扩展当前主题,还是通过codeblock来模拟代码的运行,代码如下:

static lv_style_t g_style_btn;

/*当已经添加基本主题的样式添加新样式时,调用次函数*/
static void new_theme_apply_cb(lv_theme_t * th, lv_obj_t * obj)
{
    LV_UNUSED(th);

    if(lv_obj_check_type(obj, &lv_btn_class))
    {
        lv_obj_add_style(obj, &g_style_btn, 0);
    }
}

static void new_theme_init_and_set(void)
{
    /*初始化样式*/
    lv_style_init(&g_style_btn);
    lv_style_set_bg_color(&g_style_btn, lv_palette_main(LV_PALETTE_GREEN));
    lv_style_set_border_color(&g_style_btn, lv_palette_darken(LV_PALETTE_GREEN, 3));
    lv_style_set_border_width(&g_style_btn, 3);

    /*通过当前主题初始化新主题*/
    lv_theme_t * th_act = lv_disp_get_theme(NULL);
    static lv_theme_t th_new;
    th_new = *th_act;

    /*设置父主题和新主题的样式适播放回调函数*/
    lv_theme_set_parent(&th_new, th_act);
    lv_theme_set_apply_cb(&th_new, new_theme_apply_cb);

    /*显示新主题*/
    lv_disp_set_theme(NULL, &th_new);
}


void lv_theme_change_test()
{
    lv_obj_t * btn1 = NULL;
    lv_obj_t * btn2 = NULL;
    lv_obj_t * label = NULL;

    btn1 = lv_btn_create(lv_scr_act());
    if (btn1 != NULL)
    {
        lv_obj_align(btn1, LV_ALIGN_TOP_MID, 0, 20);

        label = lv_label_create(btn1);
        if (label != NULL)
        {
            lv_label_set_text(label, "Original theme");
        }
    }

    new_theme_init_and_set();

    btn2 = lv_btn_create(lv_scr_act());
    if (btn2 != NULL)
    {
        lv_obj_align(btn2, LV_ALIGN_BOTTOM_MID, 0, -20);

        label = lv_label_create(btn2);
        if (label != NULL)
        {
            lv_label_set_text(label, "New theme");
        }
    }
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值