我继续创建自己的Button组件,重写了paintBackground(Graphics g)
方法,以使一些圆形图显示在该按钮的右边。预期结果示例:
我最终得到的结果虽然很接近,但是却不完全相同:图标与图标下面的文本之间的间隔太大,并且文本本身已经触及了圆圈。
看看Label API,有方法setGap(int)
。由于默认情况下间隙为0,因此我使用负值使它们靠得更近。这样可以按预期删除该空间,但是有一个副作用:当应用任何间隙值时,标签和图标的位置将关闭。间隙值不仅影响标签和图标的Y值,而且还影响X值。
经过大量挖掘,我在CN1本身的代码库中发现了一个错误。
在drawLabelComponent()
类的CodenameOneImplementation
方法中,有以下代码段(“对齐中心和文本位置底部”,第7254行):
case Label.BOTTOM:
case Label.TOP:
x = x + (cmpWidth - (preserveSpaceForState + leftPadding
+ rightPadding
+ Math.max(((icon != null) ? iconWidth + gap : 0),
stringWidth))) / 2;
x = Math.max(x, cmpX + leftPadding + preserveSpaceForState);
y = y + (cmpHeight - (topPadding
+ bottomPadding
+ ((icon != null) ? iconHeight + gap : 0)
+ fontHeight)) / 2;
break;
很明显,对于X和Y值, gap 变量都包含在计算中,对于设置图标和底部和底部文本之间的间隙,这是不正确的。顶部文字位置的情况。
查看左右文本位置的情况,gap变量仅用于X计算,而不用于Y计算。
如果这实际上是预期的行为,请有人启发我如何摆脱这种空白,而又不影响文本和图标的X位置。
谢谢。
答案 0 :(得分:1)
这似乎是一个错误,我们将对其进行修复。请注意,间隙并不是为负值设计的,因此如果对您而言失败,则不一定是错误。