是否有在Flex 3中显示多行文字的解决方法?到目前为止我尝试过的两个控件是mx:Text和mx:TextArea。每个控件都有自己的错误。供参考:mx:文本错误 - http://bugs.adobe.com/jira/browse/SDK-9819 mx:TextArea错误 - 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;
虽然这似乎解决了mx:Text中的问题,但是有一个大错误。计算在很大程度上依赖于font-size,letter-spacing和textItem的宽度。我可以使用这个方法,继续我的项目。但是,对此进行维护是不可避免的,对于这样的代码,它将是一个巨大的PITA。
答案 0 :(得分:7)
我自己必须处理这几次。我发现获得<mx:Text>
动态高度大小的最佳方法是将高度留在文本之外,然后在封闭的VBox,HBox等上指定百分比高度100%。如下所示应该如下为你工作:
<mx:VBox width="100%" height="100%">
<mx:Text text="Your really long text goes here." width="100%"/>
</mx:VBox>
由于这本身就是一个黑客攻击,你的语言可能会有所不同。
修改强>
如果要扩展上面的示例以便更轻松地维护代码,则应查看TextLineMetrics类。这将允许您测量文本的宽度和高度,同时考虑字体,大小等。可以找到TextLineMetrics的文档here。要使用上面的示例,您需要执行以下操作:
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;
答案 1 :(得分:1)
我使用了一个可变高度的文本区域类,对我来说效果非常好:
package
{
import mx.controls.TextArea;
/**
* TextArea that xpands to the height of the content contained
* within.
* @author joel
*
*/
public class VariableHeightTextArea extends TextArea
{
public function VariableHeightTextArea()
{
super();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(this.height != int(this.textField.measuredHeight) + 5 )
{
this.height = this.textField.measuredHeight + 5;
}
}
}
}