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

Codename One - bug in calculating Label and Icon position

我继续创建自己的 Button 组件,覆盖 paintBackground(Graphics g) 方法,让一些圆形图表与按钮一起显示。期望结果示例:

虽然我最终得到的结果非常接近,但不完全是:图标和图标下方的文本之间的 space 太大,文本本身已经接触到圆圈。

看标签API,有方法setGap(int)。由于默认情况下间隙为 0,因此我使用了负值,以使它们靠得更近。这按预期删除了 space,但是有一个副作用:在应用任何间隙值时,标签和图标的定位是关闭的。间隙值不仅会影响标签和图标的 Y 值,还会影响 X 值。

经过大量挖掘,我在 CN1 本身的代码库中发现了一个错误。 在 class CodenameOneImplementationdrawLabelComponent() 方法中,有以下片段(Alignment Center and Textposition Bottom,第 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;

很明显,gap变量被包含在X和Y值的计算中,这对于设置图标和图标之间的间隙是不正确的底部和顶部文本位置案例中的文本。

查看左右文本位置情况,gap变量只用于X计算,不用于Y计算。

如果这确实是预期的行为,请告诉我如何在不影响文本和图标的 X 位置的情况下消除间隙。

谢谢。

这似乎是一个错误,我们会修复它。请注意,差距不是为负值设计的,所以如果你失败了,那不一定是错误。