当前位置: 首页 > news >正文

《lvgl基础学习 —— lv_style》

1.lv_style

  lv_style用来控制对象的外观:颜色、字体、圆角、边框、间距等。

没有样式时:

  • 按钮像“灰盒子”

  • UI 看起来很“Demo”

有样式后:

  • 有品牌色

  • 有层次

  • 有一致风格

  样式 = UI 的“皮肤系统”

 

LVGL样式的核心认知:

  1.样式 不等于 对象

  2.一个样式可以给多个对象用

  3.一个对象可以叠加多个样式

 

样式的基本使用流程:

static lv_style_t style;lv_style_init(&style);
lv_style_set_bg_color(&style, lv_color_hex(0x007AFF));
lv_style_set_radius(&style, 10);lv_obj_add_style(obj, &style, 0);

 

demo:蓝色圆角按钮

static lv_style_t style_btn;void ui_style_demo(void)
{lv_style_init(&style_btn);lv_style_set_bg_color(&style_btn, lv_color_hex(0x007AFF));lv_style_set_bg_opa(&style_btn, LV_OPA_COVER);lv_style_set_radius(&style_btn, 12);lv_style_set_text_color(&style_btn, lv_color_white());lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 160, 60);lv_obj_center(btn);lv_obj_add_style(btn, &style_btn, 0);lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Styled Button");lv_obj_center(label);
}

 

常用的样式属性

背景相关:

lv_style_set_bg_color(&style, lv_color_hex(0x333333));
lv_style_set_bg_opa(&style, LV_OPA_COVER);

圆角:

lv_style_set_radius(&style, 10);

边框:

lv_style_set_border_width(&style, 2);
lv_style_set_border_color(&style, lv_color_hex(0xAAAAAA));

文字:

lv_style_set_text_color(&style, lv_color_white());
lv_style_set_text_font(&style, &lv_font_montserrat_18);

内边距:

lv_style_set_pad_all(&style, 10);

 

样式和“状态”的关系:

LVGL 的对象有状态:
LV_STATE_DEFAULT
LV_STATE_PRESSED
LV_STATE_CHECKED
LV_STATE_DISABLED

  同一个对象,不同状态,可以用不同样式。

 

demo:按钮按下变深色

static lv_style_t style_btn;
static lv_style_t style_btn_pressed;void ui_style_state_demo(void)
{lv_style_init(&style_btn);lv_style_set_bg_color(&style_btn, lv_color_hex(0x007AFF));lv_style_set_radius(&style_btn, 12);lv_style_init(&style_btn_pressed);lv_style_set_bg_color(&style_btn_pressed, lv_color_hex(0x005BBB));lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 160, 60);lv_obj_center(btn);lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT);lv_obj_add_style(btn, &style_btn_pressed, LV_STATE_PRESSED);lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Press me");lv_obj_center(label);
}

 

样式复用

错误做法:

lv_style_t s;
lv_style_init(&s);
/* 用一次就丢 */

 

正确做法:

static lv_style_t style_btn_primary;
static lv_style_t style_label_title;void ui_style_init(void)
{lv_style_init(&style_btn_primary);lv_style_set_bg_color(&style_btn_primary, lv_color_hex(0x007AFF));
}

 

demo:设置项(label + switch)

static lv_style_t style_row;void ui_style_layout_demo(void)
{lv_style_init(&style_row);lv_style_set_pad_all(&style_row, 10);lv_style_set_border_width(&style_row, 1);lv_style_set_border_color(&style_row, lv_color_hex(0xDDDDDD));lv_style_set_radius(&style_row, 8);lv_obj_t *cont = lv_obj_create(lv_scr_act());lv_obj_set_size(cont, 300, 200);lv_obj_center(cont);lv_obj_set_layout(cont, LV_LAYOUT_FLEX);lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);for(int i = 0; i < 3; i++) {lv_obj_t *row = lv_obj_create(cont);lv_obj_set_size(row, LV_PCT(100), 50);lv_obj_add_style(row, &style_row, 0);lv_obj_set_layout(row, LV_LAYOUT_FLEX);lv_obj_set_flex_flow(row, LV_FLEX_FLOW_ROW);lv_obj_set_flex_align(row,LV_FLEX_ALIGN_SPACE_BETWEEN,LV_FLEX_ALIGN_CENTER,LV_FLEX_ALIGN_CENTER);lv_obj_t *label = lv_label_create(row);lv_label_set_text_fmt(label, "Option %d", i + 1);lv_switch_create(row);}
}

 

新手最常见的 8 个坑

❌ 1️⃣ 忘了 lv_style_init
→ 样式无效 / 崩溃

❌ 2️⃣ 样式是局部变量
→ UI 运行一会儿就异常

❌ 3️⃣ 在回调里频繁 lv_style_init
→ 性能差

❌ 4️⃣ 想改颜色却改了 label
→ 实际该改父对象

❌ 5️⃣ 不区分状态样式
→ UI 没反馈感

❌ 6️⃣ 用样式控制位置
→ 布局应该用 layout

❌ 7️⃣ 样式太多、无规范
→ 后期维护灾难

❌ 8️⃣ 一上来就 theme
→ 先学 style 再学 theme

 

http://www.gsyq.cn/news/124685.html

相关文章:

  • 实战两台 Windows 电脑互联传输文件
  • 2025年行业内诚信的制冷设备生产厂家推荐榜,冷却塔/方形逆流冷却塔/工业冷却塔/冷却水塔/冷却塔填料/圆形逆流冷却塔制冷设备公司联系电话 - 品牌推荐师
  • 想刷到特价机票?2025这些平台容易遇到低价,也省心! - 资讯焦点
  • 2025年12月滨海新区装修公司排名top5:佰瑞佳垄断高端别墅大平层装修市场 - 品牌智鉴榜
  • redis-ai
  • 完整教程:电脑硬件解剖,拆解主流机型,分享硬件升级与故障排查经验
  • 2025-2026权威盘点:靠谱的国际博士报读渠道8大口碑好的国际博士服务商深度测评 - 阿喂嘞lvv
  • 2025年高活性NMN品牌推荐与市场动态,NMN年度报告榜单,口服品牌评测 - 资讯焦点
  • 视频融合平台EasyCVR构建新能源充电桩可视化监控服务方案
  • 2025年充电桩厂家推荐:汽车、重卡、大车、直流、大功率、商用、快速充电桩厂家选择指南 - 深度智识库
  • 【2025最新】掌上看家采集端下载安装教程详解:全平台配置实践与性能优化指南 - PC修复电脑医生
  • 2025医用病房门品牌推荐:六家国产医疗级防护门企业核心技术优势深度解析 - 品牌企业推荐师(官方)
  • 不止是电话!如何通过技术与服务甄选靠谱的腾讯企业邮箱代理商 - 品牌2026
  • 上海企业微信代理商:传统VS新兴,谁更懂中小企业需求? - 品牌2026
  • 一些检索论文的工具
  • 【赵渝强老师】MySQL集群解决方案
  • 2025年杭州小程序开发公司权威推荐榜单:app开发/官网建设/小程序搭建源头公司精选 - 品牌推荐官
  • 重磅!2025年中国充电桩源头厂家年度十大品牌竞争力深度解析 - 深度智识库
  • 2025年叶片式定量灌装机十大品牌权威推荐,市场上定量灌装机生产厂家口碑排行甄选实力品牌 - 品牌推荐师
  • 2026在职读研必看:国际在职研究生教育咨询机构七大靠谱国际在职硕士博士申请辅导机构深度测评指南 - 阿喂嘞lvv
  • 大型前端应用性能架构深度设计
  • 2025 年 12 月锅炉厂家权威推荐榜:蒸汽/热水/导热油锅炉,生物质/燃气/电加热/电锅炉,高效节能供暖锅炉品牌深度解析 - 品牌企业推荐师(官方)
  • 2025华北充电桩品牌深度报告:在地化解决方案如何破解区域充电难题 - 深度智识库
  • 测试java程序插入单表2000万条数据(MySQL,PostgreSQL,达梦)
  • 【赵渝强老师】Docker容器的资源管理机制
  • 2025年泥浆泵活塞工厂权威推荐榜:铜骨架由壬密封厂/泥浆泵胶皮/软盘根加工厂精选 - 品牌推荐官
  • 家装指南:2025年厦门口碑装修公司精选攻略 - 品牌测评鉴赏家
  • 新手PM必学:多项目并行任务优先级怎么排(含RICE等思路)
  • 考完软件工程啦
  • 关于java中类和对象的学习总结