Ich möchte meine mobile Funken TextArea Komponente, um alle Inhalte zu wickeln. Ich habe herausgefunden, mx_internal Weg dies zu tun, aber ich kann nicht anrufen mx_internal :: getTextField(). NumLines Methode - es gibt keine solche ... Wer hat das schon einmal getan?AutoSizing Flex Mobile Funke TextArea Komponente
Antwort
Hier ist eine Lösung für mobile:
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;
Hier eine Lösung mit wenig benutzerdefinierten TextArea-Klasse, gibt es Kommentare, ein wenig mehr zu erklären.
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;
}
}
}
Hoffe, das wird helfen.
EDIT: Mit einer großen Anzahl von Zeilen steigt die Höhe des TextArea zu sehr. Sollte es schaffen.
es wirft eine Ausnahme bei Zeile _padding = ((textDisplay als StyleableStageText) .x - x) + (width - (textDisplay als StyleableStageText) .width); Die Ausnahme ist: "Auf eine Eigenschaft oder Methode eines Nullobjektverweises kann nicht zugegriffen werden." –
Hier ist, wie ich es in mxml verwenden:
Und ein Action-Skript, wo ich einen Text zuweisen: StyleableTextField (txt_genel.textDisplay). htmlText = ozet ['genelbilgiler'] als String; –
Wenn Sie einen Weg gefunden, es zu tun; aber es funktioniert nicht Ich denke, Sie müssen etwas Code teilen, damit wir diagnostizieren können, warum es nicht funktioniert. – JeffryHouser
Ich habe versucht, heightInLine = {NaN} zuzuweisen - das funktioniert in früheren Versionen, aber nicht in 4.6. Und eine andere Methode, die ich ausprobiert habe, war das Erstellen einer neuen Skin ohne Scrolls, aber die IDE gab mir einen Fehler, dass Scroller in der Definition nicht gefunden werden konnten. Also frage ich nach irgendeinem anderen Vorschlag? –
Das liegt wahrscheinlich daran, dass 4.6 StageText anstelle von Flash TextField verwendet. In 4.6, wenn Sie zu den alten Skins zurückkehren, wette ich, dass es funktioniert. Ich habe keine Zeit, die spezifischen Hautnamen nachzuschlagen, aber ich glaube, ich habe kürzlich auf dem Flextras Blog darüber geschrieben. – JeffryHouser