08. 按钮部件

一、按钮部件

  在 LVGL 中,当 按钮部件(lv_btn)被创建出来之后,其默认是一个圆角矩形,较为遗憾的是,按钮部件并不能直接设置文本。按钮部件仅有一个组成部分:主体背景

  我们可以通过 lv_btn_create() 函数 创建按钮部件

#define lv_btn_create        lv_button_create
lv_obj_t * lv_button_create(lv_obj_t * parent);

  在创建按钮部件之后,我们可以通过如下函数来设置按钮部件的样式。

void lv_obj_set_size(lv_obj_t * obj, int32_t w, int32_t h);                                         // 设置部件的大小
void lv_obj_set_align(lv_obj_t * obj, lv_align_t align);                                            // 设置部件的对齐方式
void lv_obj_set_style_bg_color(lv_obj_t * obj, lv_color_t value, lv_style_selector_t selector);     // 设置部件的背景色

  我们还可以通过如下函数为按钮部件添加事件。

// 开启状态切换
void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f);

// 添加事件
lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter, void * user_data);

二、实验例程

#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"

lv_obj_t *label;

int main(void)
{
    HAL_Init();
    System_Clock_Init(8, 336, 2, 7);
    Delay_Init(168);

    SPI_Simulate_Init();
    // SRAM_Init();
    TIM_Base_Init(&g_tim6_handle, TIM6, 83, 999);
    __HAL_TIM_CLEAR_IT(&g_tim6_handle, TIM_IT_UPDATE);                          // 清除更新中断标志位
    HAL_TIM_Base_Start_IT(&g_tim6_handle);                                      // 使能更新中断,并启动计数器

    lv_init();
    lv_port_disp_init();
    lv_port_indev_init();

    // 测试代码
    label = lv_label_create(lv_scr_act());                                      // 创建标签部件
    lv_obj_set_style_text_font(label, &lv_font_montserrat_30, LV_PART_MAIN);    // 设置标签部件的字体样式
    lv_obj_set_align(label, LV_ALIGN_TOP_MID);                                  // 设置标签部件靠上居中对齐
    lv_label_set_text(label, "button test");                                    // 设置标签部件的文本内容

    lv_obj_t *button =  lv_btn_create(lv_scr_act());                                // 创建按钮部件
    lv_obj_set_size(button, 100, 50);                                               // 设置按钮部件的大小
    lv_obj_set_align(button, LV_ALIGN_CENTER);                                      // 设置按钮部件居中对齐
    lv_obj_set_style_bg_color(button, lv_color_hex(0xBBFFAA), LV_STATE_PRESSED);    // 设置按钮部件按下时的背景颜色
    lv_obj_add_flag(button, LV_OBJ_FLAG_CHECKABLE);                                 // 开启按钮部件的状态切换

    lv_obj_add_event_cb(button, button_event_cb, LV_EVENT_ALL, NULL);               // 注册按钮部件的事件回调函数

    while (1)
    {
        lv_timer_handler();
        Delay_ms(5);
    }
  
    return 0;
}
void button_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);                                // 获取事件的触发类型

    switch (code)
    {
    case LV_EVENT_PRESSED:
        lv_label_set_text(label, "button pressed");
        break;

    case LV_EVENT_RELEASED:
        lv_label_set_text(label, "button released");
  
    default:
        break;
    }
}
posted @ 2024-06-01 22:17  星光映梦  阅读(18)  评论(0编辑  收藏  举报