Codename One - 计算标签和图标位置的错误

问题描述 投票:1回答:1

我继续创建自己的Button组件,重写paintBackground(Graphics g)方法,使用按钮显示一些圆形图表。期望结果的例子:Example of the desired result

我最终得到的结果非常接近,但并不完全是:图标和图标下面的文字之间的空间太大,文本本身已经触及了圆圈。

查看Label API,有方法setGap(int)。由于默认情况下间隙为0,因此我使用了负值,以使它们更接近。这会按预期移除空间,但会产生副作用:应用任何间隙值时,标签和图标的位置都会关闭。间隙值也会影响X值,而不仅仅影响标签和图标的Y值。

经过大量挖掘,我在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变量仅用于X计算,不用于Y计算。

如果这实际上是预期的行为,有人请赐教我如何在不影响文本和图标的X位置的情况下摆脱差距。

谢谢。

label codenameone positioning codebase
1个回答
1
投票

这似乎是一个错误,我们将解决它。请注意,差距不是针对负值设计的,所以如果它失败了,那么它不一定是个bug。

© www.soinside.com 2019 - 2024. All rights reserved.