对于加载时间考虑,我在Flex应用程序中使用运行时css文件。
我遇到多行文字控件的问题:
<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>
当我的CSS样式表加载后文本样式正确更改,但不重新计算高度。它似乎只是一个单行字段。
仅供参考:控件实际上不可见,并且由翻转触发。所以我真的不在乎样式表是否已经加载并且它们获得标准系统文本。我jsut希望它在加载时是正确的高度。
答案 0 :(得分:3)
根据文档
的Adobe文档调整文本控件的大小
Flex尺寸 文本控制如下:
如果为两者指定像素值 高度和宽度属性,任何 超过大小的文本 控件被裁剪在边框处。
如果指定显式像素 宽度,但没有高度,Flex包裹 文本以适应宽度并计算 适合所需数量的高度 线条。
如果指定基于百分比 宽度没有高度,Flex没有 包装文本,高度等于 由...确定的行数 返回字符数。
如果您只指定一个高度而没有 宽度,高度值不 影响宽度计算和Flex 调整控件的大小以适应宽度 最大线。
作为一般规则,如果你有很长时间 文字,你应该指定一个基于像素 宽度属性。如果文字可能 改变,你想确保 文本控制总是占用相同的 应用程序中的空间,设置 显式高度和宽度属性 这符合最大的预期文本。
所以我用来解决这个问题的方法就是让Text通过任何容器限制宽度的绑定表达式获得宽度,通常是直接父级。
e.g。
<mx:Canvas id="box" width="100%" backgroundColor="Red">
<mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
答案 1 :(得分:1)
对于遇到此问题的任何其他人,我找到的解决方案是创建一个扩展mx.controls.Text的自定义组件
然后重写styleChange()方法,并在应用样式后显式调用textate字段的invalidateDisplayList()方法。
当样式发生变化时应该自动调用它,但是由于某些原因,在flex 3.5中它不会被调用。
public class TextObject extends Text {// ... override public function styleChanged(styleProp:String):void {invalidateDisplayList(); } }
希望在我丢失的时候保存一些。
答案 2 :(得分:0)
您可以使用固定像素宽度而不是100%吗?我以前在动态文本控件上错误地计算了100%的问题。