代号之一SpanLabel文本不占全宽

时间:2018-07-31 15:41:56

标签: codenameone

我正在使用SpanLabel组件,但是在屏幕上,当文本大小较小时,文本内容不会占据全宽 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果宽度不确定,则可能发生这种情况。 SpanLabel将无法重排,充其量只能使其自己的Container调整大小。有两种解决方案:

  • 确定性层次结构-通常最好,但并非总是可能

  • 使用TextArea-有时这可以通过减小层次结构深度来解决此问题。

确定性布局意味着元素的大小由层次结构以清晰的方式确定。例如。 BoxLayout.Y在X轴上具有确定性,因为它为X轴上的组件提供了所有可用空间。 FlowLayout不确定,因为它为组件提供了首选大小。

某些布局可以来回移动,并根据其轴确定性。

这很重要,因为当我们布局组件时,我们从上到下。因此,我们遍历Form到其子节点,询问每个子节点的首选大小。如果此时SpanLabel不知道它的大小,则会给出错误的值,并且由于我们不对UI进行重排,我们以后也无法真正解决该问题。回流会最大程度地造成潜在的无限循环和性能问题。

我们尝试通过在revalidate()内进行TextArea调用来解决某些行为,但这有其局限性。如果层次结构太深,则已经设置了首选大小,因此无法适应。 SpanLabel只是一个Container和一个TextArea和一个Label(用于图标)。因此,仅使用TextArea就可以稍微简化层次结构,有时可能就足够了。例如

TextArea t = new TextArea(myText);
t.setEditable(false);
t.setFocusable(false);
t.setUIID("Label");