Rob*_*und 2 apache-flex actionscript-3
是否有在Flex 3中显示多行文本的解决方法?到目前为止我尝试过的两个控件是mx:Text和mx:TextArea.每个控件都有自己的错误.供参考:mx:Text bug - http://bugs.adobe.com/jira/browse/SDK-9819 mx:TextArea bug - http://bugs.adobe.com/jira/browse/SDK-12616.基本上,如果您没有指定高度并且文本换行到下一行,则两个控件都不会正确处理滚动(高度由Flex动态确定,基于换行).有没有人有一个可能有用的解决方法?
谢谢.
更新:我过去尝试过的方法之一是手动计算mx:Text元素的高度.我可以通过使用以下方法来做到这一点:
var textItem:Text = new Text();
var len:int = value.length;
var lines:int = int(len/115) + 1;
var height:int = lines * 20;
textItem.height = height;
Run Code Online (Sandbox Code Playgroud)
虽然这似乎解决了mx:Text中的问题,但是有一个大错误.计算在很大程度上依赖于font-size,letter-spacing和textItem的宽度.我可以使用这个方法,继续我的项目.但是,对此的维护是不可避免的,并且使用这样的代码,它将是一个巨大的PITA.
我自己不得不处理这几次.我发现获得动态高度大小的最好方法<mx:Text>是将高度留在文本之外,然后在封闭的VBox,HBox等上指定100%的百分比高度.以下内容应该对您有用:
<mx:VBox width="100%" height="100%">
<mx:Text text="Your really long text goes here." width="100%"/>
</mx:VBox>
Run Code Online (Sandbox Code Playgroud)
由于这本身就是一个黑客,你的milage可能会有所不同.
编辑
如果要扩展上面的示例以便更容易维护代码,则应查看TextLineMetrics类.这将允许您测量文本的宽度和高度,同时考虑字体,大小等.可以在此处找到TextLineMetrics的文档.要使用上面的示例,您需要执行以下操作:
var textItem:Text = new Text();
var metrics:TextLineMetrics = textItem.measureText( value );
var len:int = metrics.width;
var lines:int = int(len/textItem.width) + 1;
var height:int = lines * metrics.height;
textItem.height = height;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7275 次 |
| 最近记录: |