すべてのコンテンツをラップするモバイル Spark テキストエリアコンポーネントを作成したいと考えています。これを行う mx_internal の方法を見つけましたが、mx_internal::getTextField().numLinesメソッドを呼び出すことができません - そのようなものはありません... 以前にこれを行ったことがある人はいますか?
1558 次
2 に答える
3
モバイル向けのソリューションは次のとおりです。
for(var i:int=0; i < StyleableTextField(txt_genel.textDisplay).numLines; i++) {
ta_height += StyleableTextField(txt_genel.textDisplay).getLineMetrics(i).height;
}
txt_genel.height = ta_height;
于 2012-05-21T09:31:32.993 に答える
0
カスタム TextArea クラスをほとんど使用しないソリューションです。もう少し説明するコメントがあります。
package
{
import mx.events.FlexEvent;
import spark.components.TextArea;
import spark.components.supportClasses.StyleableStageText;
import spark.events.TextOperationEvent;
public class CustomTextArea extends TextArea
{
private var _lineNumber:int = 1;
private var _padding:int;
private var _minHeight:int;
public function CustomTextArea()
{
super();
addEventListener(FlexEvent.CREATION_COMPLETE, function setBehaviour(event:FlexEvent):void
{
//minHeight to prevent textarea to be too small
_minHeight = height;
//padding between textarea and text component inside to calculate line number
_padding = ((textDisplay as StyleableStageText).x - x) + (width - (textDisplay as StyleableStageText).width);
//listener for text changing
addEventListener(TextOperationEvent.CHANGE, setHeight);
});
}
private function setHeight(event:TextOperationEvent):void
{
//line number is textwidth divided by component width
_lineNumber = (((textDisplay as StyleableStageText).measureText(text).width + _lineNumber * _padding) / width) + 1;
//text height is line number * text height
var newHeight:int = _lineNumber * (textDisplay as StyleableStageText).measureText(text).height;
//if new height > min height, set height
if (newHeight > _minHeight)
height = newHeight;
}
}
}
これが役立つことを願っています。
編集: 行数が多いと、TextArea の高さが上がりすぎます。管理する必要があります。
于 2012-05-20T14:33:37.803 に答える