2011-03-21 35 views
1

在过去,我用API元素flash.text.TextField对象是这样的:的Flex 4.1富文本/ RichEditableText将自动调整大小

tf = textField(); 
tf.autoWrap = true 
tf.autoSize = "left" 
tf.width = 100; 
tf.text = "Text that is too long to fit in the textfield, so it autowraps, automatically updating the height." 
addChild(tf); 
someNewObject = new MovieClip(); 
someNewObject.y = tf.height + 5; 
addchild(someNewObject); 

这样做会动态地把我someNewObject只是文本框下方。

我试图找到一个允许我这样做的TLF组件。

我试过使用mc.core.FTETextField。它调整大小,但不支持HTML

我试过使用Spark TextArea,但显然,设置heightByLines = NAN的技术不再有效。

我看到有人说使用RichEditableText,因为它支持自动调整大小,但我不知道如何。

这是用于静态文本。不适用于动态或输入文字。

我正在编码这个,所以如果你有一些建议,请将它们发布在代码中,而不是MXML。

感谢迄今为止的答案,但UITextfield不是一个TLF组件,RichText的示例不会导致RichText高度与文本一起增长。

我需要的是一个组件,我可以设置宽度,添加TLF格式的文本并获取组件渲染后的高度。就像TextField在添加文本时一样。

回答

1

够简单,你只需要创建你的TextFlow对象。

<fx:Declarations> 
<s:TextFlow id="textFlow"> 
    Hello, this <s:span fontWeight="bold"> is a test</s:span> of TextFlow 
</s:TextFlow> 
</fx:Declarations> 
<s:RichText id="richText" textFlow="{textFlow}" /> 

但文本流在那里使用Flex的标签。您可以随时使用一个转换器,以及改造真正的HTML字符串为TextFlow这样的:

<fx:Script> 
    <![CDATA[ 
     import flashx.textLayout.conversion.ITextImporter; 
     import flashx.textLayout.conversion.TextConverter; 

     private const importer:ITextImporter = TextConverter.getImporter(TextConverter.TEXT_FIELD_HTML_FORMAT); 
     private const htmlString:String = "Hello, this <b>is a test</b> of TextFlow"; 

    ]]> 
</fx:Script> 
<s:RichText textFlow="{importer.importToFlow(htmlString)}"/> 
0

的RichEditableText的伎俩,但你必须明确地为autowrapping width属性。根据我的经验,如果将宽度设置为%100,可能会导致一些问题(对我来说会导致一些问题),所以我建议您明确设置宽度值以确保换行。 ASDoc的RichEditableText解释了很多。