2012-05-16 5 views
8

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

+0

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

+0

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? –

+0

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

Antwort

3

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; 
0

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.

+0

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." –

+0

Hier ist, wie ich es in mxml verwenden:

+0

Und ein Action-Skript, wo ich einen Text zuweisen: StyleableTextField (txt_genel.textDisplay). htmlText = ozet ['genelbilgiler'] als String; –

Verwandte Themen