希望layout能自定义每条边的padding 而不是统一设置所有边的padding

如题,我的初衷是想做一个这样的对话框

我要对话框的大小根据文字内容来动态更新,所以要用到layout,然后resizeMode设置为container,这时背景就会根据label的大小来更改大小,如果用正方形的图片完全没有问题,但是因为这种图片底部有一部分不是文字显示区域,文字就会显示在外面

设置padding并不能解决,widget也不行

现在我暂时的解决办法就是在文字node后面弄一个透明图片占位,把文字node顶上去

请教各位大神,有没有更好的办法?

引擎开发团队的大神会不会考虑添加自定义修改单独一条边的padding?或者widget组件能改变父节点大小也行

你是把 Sprite 放在 Layout 上面是吧?Sprite 设置为 Scale 9。
试试看在 label 下面加一个子节点,子节点不负责渲染,只负责用 widget 实现 padding。

大神,现在有两个节点

第一个:

对话框背景background,包括sprite和layout组件,并且layout组件是垂直类型,resizeMode是container

第二个:

文本内容label

文本内容对话框背景 的子节点,如果照你说的

只能改变这个子节点和label的位置关系啊,并不能改变label和background的位置关系啊

我现在的目的就是想label的底部距离background的底部50像素,然后其他三条边只需要20像素的距离:joy:

不知道是不是我没有理解你的意思呢?

你把这个子节点通过 widget 撑大,并且调节子节点相对父节点的 offset,就能改变 background 的尺寸和位置啦。

是在background下添加一个子节点还是在label下添加子节点呢?如果是label下添加子节点,这个子节点怎么影响到background呢?还是说你的意思是把我占位的透明的sprite换成只负责设置padding的node?不用渲染?

我说的是在 Label 下面添加子节点。不过我试了一下,效果出不来,因为尺寸的更新顺序不对,导致 layout 没能正确刷新。看来不能用这种方式实现。

:watermelon: 所以我希望能自定义每条边的padding,这样就方便多了,而且我觉得应该没有多大难度吧? 感谢大神回复:grin:

这个实现难度很小,看 @nantas 怎么考虑啦。

我觉得分为paddingX,paddingY,就可以了

但是像我那种对话框,同样是x轴,上面和下面的padding要求是不一样的,而且比如一些奇形怪状的对话框背景,四条边的padding也可能需要不一样,光有x和y对于我来说不够用:joy:

而且如果只有paddingX和paddingY的话,做这样的对话框,现在都可以实现,只需要添加两个layout,一个水平方向,一个 垂直方向就行了:joy:

感谢,希望能够添加到creator里面:watermelon:

其实我觉得这里的需求应该自己写一个脚本来实现。
脚本监听 Label 所在节点的 size-changed 事件,收到事件后更新 background 所在节点的尺寸即可。不需要用到 Layout。

额,关键是我觉得这样比较麻烦,而且我在label后面添加一个node占位更方便,主要是我想要方便一点:joy:

而且我是需要label至少看起来在background的中间,而且要动态更改background的size,所以才用的layout

主要是为了方便:watermelon:

对呀,你这一种只要用透明占位就行了。。我都是这么搞的。。。