apache-flex - 是否有针对 Flex 的多行文本解决方法

标签 apache-flex actionscript-3

是否有在 Flex 3 中显示多行文本的解决方法?到目前为止,我尝试过的两个控件是 mx:Text 和 mx:TextArea。每个控件都有自己的与之关联的错误。供引用:mx:Text bug - 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 中的问题,但存在一个大错误。计算在很大程度上依赖于字体大小、字母间距和 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>

由于这本身就是一个 hack,您的里程数可能会有所不同。

编辑

如果您想扩展上面的示例以便更轻松地维护代码,您应该查看 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;

关于apache-flex - 是否有针对 Flex 的多行文本解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358826/

相关文章:

xml - AS3-我正在尝试通过XML播放列表播放声音文件,但似乎无法正常工作

css - Flex CSS 不支持对齐操作?

apache-flex - 柔性 :datagrid sorting doesn't seem to work

apache-flex - 绑定(bind)到对象属性

ios - Flex 4.6 TextInput 提示 ios 行为不当

android - 适用于 Android 的 Flex 多页表单

Flash Player 10 实时音频播放

java - 在 Android 启动时启动 Flex 移动应用程序

css - 在 Flex 4.5 中,如何在自定义 CSS namespace 中对样式使用 getStyleDeclaration?

actionscript-3 - 滚动到 Flex 4 Spark List 组件中的选定项