请教各位大神,我现在使用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个问题解决了:
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个问题依旧...有没有遇到此问题朋友啊?
离线
我觉得这个应该是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);
最近编辑记录 vip888888 (2020-12-02 12:45:53)
离线
我觉得这个应该是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);
测试一下?
谢谢了
离线
不同的,label生成不是属于imgbtn的,这个label生成和imgbtn是同级的,而不是imgbtn作为父级生成的。
lv_obj_t * label = lv_label_create(tv, NULL);这个的父级是tv和imagbtn的父级是一样的。
离线
不同的,label生成不是属于imgbtn的,这个label生成和imgbtn是同级的,而不是imgbtn作为父级生成的。
lv_obj_t * label = lv_label_create(tv, NULL);这个的父级是tv和imagbtn的父级是一样的。
确实是,父级不同。
这样做是可以改变label的坐标,但是当imgbtn按下时不能改变label的字体颜色啊...
离线
确实是,父级不同。
这样做是可以改变label的坐标,但是当imgbtn按下时不能改变label的字体颜色啊...
我觉着嘛,你为啥不把字P在背景图上算了这样按下一张图弹起一张图就行了。像这种操作要是想改变字体颜色的话,可能就需要在button回调里做了。要不就研究下imgbtn字体位置问题了。我没去研究过。不过你可以看下那个lv_demo_printer();的例子,里面好像字体就是在左下脚的。
离线
dgtg 说:确实是,父级不同。
这样做是可以改变label的坐标,但是当imgbtn按下时不能改变label的字体颜色啊...我觉着嘛,你为啥不把字P在背景图上算了这样按下一张图弹起一张图就行了。像这种操作要是想改变字体颜色的话,可能就需要在button回调里做了。要不就研究下imgbtn字体位置问题了。我没去研究过。不过你可以看下那个lv_demo_printer();的例子,里面好像字体就是在左下脚的。
要做多国语言呀...
离线