容器首选尺寸代号One

时间:2017-12-03 16:42:19

标签: java codenameone

我似乎对容器如何计算高度与容器中的组件相比感到困惑。

我有一个带有TableLayout的Container,它有1行和2列。在这两个单元格中都有不同的TextAreas。

TableLayout tl = new TableLayout(1, 2);
Container container = new Container(tl);
TextArea ta1 = new TextArea("Some long text");
TextArea ta2 = new TextArea("Some other long text");
container.add(tl.createConstraint().widthPercentage(50), ta1);
container.add(tl.createConstraint().widthPercentage(50), ta2);

我遇到的问题是容器的高度大约是两个TextAreas的高度的两倍,这在TextAreas下留下了一个很大的,不需要的空隙。

我已经尝试重写calcPreferredSize方法,该方法似乎与我放入的任何Dimension一起使用。问题是我不知道两个TextAreas的高度是多少。

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

这是一个固有的回流问题。文本区域不“知道”将给出多少空间,因此它从父布局请求特定的首选大小。

父布局使用自己的逻辑,该逻辑与首选大小有一定关系,但也与您的请求有某种关系(例如50%宽度,2列)。它为文本区域提供了“认为”可以工作的空间。如果没有,文本区域会尝试重新调整大小一次,但这可能会导致我们不准确。

一些框架,例如HTML支持回流的概念,它不断地列出一切。这通常是为什么HTML比大多数原生UI慢的原因。回流看起来很整洁但是通常很难检测到它被“摧毁你的CPU”所征税。

避免这种情况的一个常见技巧是确定文本区域的行/列并禁用文本区域的grow with content选项。这使得组件的大小更具确定性,同时也略微提升了性能。但是,它可能会导致不受欢迎的效果,例如文本被裁剪。