2011-03-21 39 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解釋了很多。