我正在创建一个可变大小的自定义Codenameone组件。该组件显示固定数量的文本,跨越多行。因此宽度和高度是相关的。如果宽度较小,则较少的文本适合一行,并且需要更多行。我设法设置首选宽度和首选高度。麻烦的是,当实际绘画发生时,宽度显然由图形对象graphics.getClipWidth()
给出,并且与我的首选宽度不匹配。因此,我的首选高度(在绘画时看起来等于graphics.getClipHeight()
)是不正确的,因为剪辑宽度不等于我的首选宽度,用于计算首选高度。如何让graphics.getClipHeight()
获得正确的身高?换句话说,是否可以使用组件在渲染时实际具有的宽度来指定组件的高度?
祝福 Marc K
答案 0 :(得分:0)
这就是我们对TextArea
的确切问题,我担心没有简单的答案。例如。如果组件提供了X的首选大小,则布局管理器可能决定以不同方式分配大小,因此需要不同的布局。
这是我们在构建Codename One时做出的有意识的设计选择,为了实现这一目标,您需要通过重新计算尺寸/尺寸的层次结构“回流”有效递归,直到您获得最佳匹配。根据定义,这些算法速度较慢且难以进行基准测试(因为很难预测回流在具有不同字体,填充等的设备上的行为方式)。
在TextArea
我们有一个“可怜的勒芒回流”,如果宽度看起来不对,会触发重新验证。这是TextArea
中许多问题的根源。
您可以在TextArea source中看到这一点,搜索setShouldCalcPreferredSize
来电。