您尚未登录。

楼主 #1 2020-12-01 18:58:33

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

请教lvgl7.0 imgbtn图片按钮的问题

请教各位大神,我现在使用lvgl7.0 imgbtn图片按钮,遇到两个问题:
1.创建一个imgbtn后,再创建一个label, 在label显示按钮的名称,问题来了: label的位置不能改变。如下:
    lv_obj_t * icon = lv_imgbtn_create(parent, NULL);
    lv_imgbtn_set_src(icon,LV_BTN_STATE_RELEASED,nor_icon);//图片按钮正常的状态
    lv_imgbtn_set_src(icon,LV_BTN_STATE_PRESSED,pre_icon);//图片按钮按下的状态

    lv_obj_t * label = lv_label_create(icon, NULL);
    lv_label_set_text(label, txt);
    //左上角偏移...
    lv_obj_align(label, icon, LV_ALIGN_IN_TOP_LEFT, 0, 0);//这里更改label的座标,但是一直没变化...大家是如何做的?

2.也是这个label的问题,我想在图片按钮被按下的时候,改变label的字体颜色,请教如何才能实现?
看原子哥V6.0的视频是通过lv_imgbtn_set_style(imgbtn1,LV_BTN_STATE_PR,&pr_style)来做的,但是发现V7.0竟然没有这个函数了....哭晕了...难道要用回V6.0吗?

先谢谢大家了!

离线

楼主 #2 2020-12-02 11:12:02

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: 请教lvgl7.0 imgbtn图片按钮的问题

查看官方的手册,第2个问题解决了:
    lv_style_t style;
    lv_style_init(&style);
    lv_style_set_text_color(&style, LV_STATE_DEFAULT, LV_COLOR_BLACK);//常态黑色
    lv_style_set_text_color(&style, LV_STATE_PRESSED, LV_COLOR_WHITE);//按下白色

第1个问题依旧...有没有遇到此问题朋友啊?

离线

楼主 #4 2020-12-02 15:30:37

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: 请教lvgl7.0 imgbtn图片按钮的问题

vip888888 说:

我觉得这个应该是imgbtn默认style的问题,估计是里面的label默认就是居中显示的,所以你设置的align无效。这个有点像你把一个容器设置这个
lv_cont_set_layout(h, LV_LAYOUT_PRETTY_MID);布局之后,你在里面使用align去设置他的子代都是无效的。具体的我还没去研究过,我一般是如下操作去设置的。

        tv = lv_tabview_create(lv_scr_act(), NULL);

    LV_IMG_DECLARE(imgbtn_green);
    LV_IMG_DECLARE(imgbtn_blue);

    lv_obj_t * imgbtn1 = lv_imgbtn_create(tv, NULL);
    lv_imgbtn_set_src(imgbtn1, LV_BTN_STATE_RELEASED, &imgbtn_green);
    lv_imgbtn_set_src(imgbtn1, LV_BTN_STATE_PRESSED, &imgbtn_green);
    lv_imgbtn_set_src(imgbtn1, LV_BTN_STATE_CHECKED_RELEASED, &imgbtn_blue);
    lv_imgbtn_set_src(imgbtn1, LV_BTN_STATE_CHECKED_PRESSED, &imgbtn_blue);

    lv_obj_t * label = lv_label_create(tv, NULL);
    lv_label_set_text(label, "12");
    lv_obj_align(label, imgbtn1, LV_ALIGN_IN_LEFT_MID, 10, 0);
    lv_imgbtn_set_checkable(imgbtn1, true);

看了一下,一样的用法啊!
您那边方便将lv_obj_align(label, imgbtn1, LV_ALIGN_IN_LEFT_MID, 10, 0);
改成lv_obj_align(label, imgbtn1, LV_ALIGN_IN_TOP_LEFT, 10, 0);
测试一下?
谢谢了

离线

楼主 #6 2020-12-02 18:33:14

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: 请教lvgl7.0 imgbtn图片按钮的问题

vip888888 说:

不同的,label生成不是属于imgbtn的,这个label生成和imgbtn是同级的,而不是imgbtn作为父级生成的。
lv_obj_t * label = lv_label_create(tv, NULL);这个的父级是tv和imagbtn的父级是一样的。

确实是,父级不同。
这样做是可以改变label的坐标,但是当imgbtn按下时不能改变label的字体颜色啊...

离线

楼主 #8 2020-12-04 09:33:25

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: 请教lvgl7.0 imgbtn图片按钮的问题

vip888888 说:
dgtg 说:

确实是,父级不同。
这样做是可以改变label的坐标,但是当imgbtn按下时不能改变label的字体颜色啊...

我觉着嘛,你为啥不把字P在背景图上算了这样按下一张图弹起一张图就行了。像这种操作要是想改变字体颜色的话,可能就需要在button回调里做了。要不就研究下imgbtn字体位置问题了。我没去研究过。不过你可以看下那个lv_demo_printer();的例子,里面好像字体就是在左下脚的。

要做多国语言呀...

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn