2012-05-16 25 views
8

Voglio fare la mia componente cellulare scintilla textarea per avvolgere tutti i contenuti. Ho scoperto il modo mx_internal di farlo ma non sono in grado di chiamare il metodo mx_internal :: getTextField(). NumLines - non c'è nessuno ... Chi ha già fatto questo?ridimensionamento automatico Flex mobile componente scintilla textarea

+0

Se hai trovato un modo per farlo; ma non funziona, credo che dovrai condividere del codice per poter diagnosticare perché non funziona. – JeffryHouser

+0

Ho provato ad assegnare heightInLine = {NaN} - che funziona nelle versioni precedenti ma non in 4.6. E un altro modo in cui ho provato è stato creare una nuova skin senza scroll, ma IDE mi ha dato un errore che non è stato in grado di trovare gli scrollers nella definizione. Quindi sto chiedendo qualche altro suggerimento? –

+0

Ciò è probabilmente dovuto al fatto che 4.6 utilizza StageText anziché Flash TextField. In 4.6 se torni alle vecchie skin, scommetto che funzionerà. Non ho tempo per cercare i nomi specifici della skin, ma penso di averlo scritto di recente sul blog di Flextras. – JeffryHouser

risposta

3

Ecco una soluzione per il 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

Qui una soluzione con una piccola classe di testo personalizzata, ci sono commenti per spiegare un po 'di più.

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

Spero che questo possa essere d'aiuto.

MODIFICA: con un numero elevato di righe, l'altezza del TextArea aumenta troppo. Dovrebbe essere gestibile.

+0

genera un'eccezione alla riga _padding = ((textDisplay as StyleableStageText) .x - x) + (width - (textDisplay as StyleableStageText) .width); l'eccezione è: "Impossibile accedere a una proprietà o un metodo di riferimento a un oggetto nullo." –

+0

Ecco come lo uso in MXML:

+0

E uno script di azione in cui assegno un testo ad esso: StyleableTextField (txt_genel.textDisplay). htmlText = ozet ['genelbilgiler'] come String; –