代号一-计算标签和图标位置的错误

时间:2019-04-17 13:24:29

标签: label codenameone positioning codebase

我继续创建自己的Button组件,重写了paintBackground(Graphics g)方法,以使一些圆形图显示在该按钮的右边。预期结果示例: Example of the desired result

我最终得到的结果虽然很接近,但是却不完全相同:图标与图标下面的文本之间的间隔太大,并且文本本身已经触及了圆圈。

看看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位置。

谢谢。

1 个答案:

答案 0 :(得分:1)

这似乎是一个错误,我们将对其进行修复。请注意,间隙并不是为负值设计的,因此如果对您而言失败,则不一定是错误。