0

出于加载时间的考虑,我在我的 Flex 应用程序中使用了运行时 css 文件。

我在使用多行文本控件时遇到问题:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

当我的 CSS 样式表已正确加载文本样式时,会发生更改,但不会重新计算高度。它似乎只是一个单行字段。

仅供参考:控件实际上是不可见的,并且由翻转触发。所以我真的不在乎样式表是否没有加载并且他们得到标准的系统文本。我只是希望它在加载时是正确的高度。

4

3 回答 3

3

根据 Adob​​e 文本文档

调整文本控件的大小

Flex 调整 Text 控件的大小如下:

如果同时为 height 和 width 属性指定像素值,则任何超出控件大小的文本都会在边框处被剪裁。

如果您指定明确的像素宽度,但没有指定高度,Flex 会将文本换行以适合宽度并计算高度以适合所需的行数。

如果您指定基于百分比的宽度且不指定高度,则 Flex 不会换行文本,并且高度等于由 Return 字符数确定的行数。

如果只指定高度而不指定宽度,则高度值不会影响宽度计算,并且 Flex 会调整控件的大小以适合最大线条的宽度。

作为一般规则,如果您有长文本,则应指定基于像素的宽度属性。如果文本可能会更改,并且您希望确保 Text 控件始终占用应用程序中的相同空间,请设置适合最大预期文本的显式高度和宽度属性。

所以我用来处理这个问题的技巧是让 Text 通过绑定表达式从任何限制它的宽度的容器中获取它的宽度,通常是直接父级。

例如

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
于 2009-07-11T01:17:54.557 回答
1

对于遇到此问题的任何其他人,我找到的解决方案是创建一个自定义组件扩展 mx.controls.Text

然后覆盖 styleChange() 方法,并在应用样式后显式调用文本字段的 invalidateDisplayList() 方法。

它应该在样式更改时自动调用,但没有......由于某种原因,在 flex 3.5 中它不是。

public class TextObject extends Text { //... 覆盖 public function styleChanged(styleProp:String):void { invalidateDisplayList(); } }

希望能拯救一些我一直迷路的人。

于 2010-06-17T12:33:56.353 回答
0

您可以使用固定像素宽度而不是 100% 吗?我以前在动态文本控件上错误地计算了 100% 的问题。

于 2008-11-22T17:11:13.420 回答