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
risposta
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;
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.
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." –
Ecco come lo uso in MXML:
E uno script di azione in cui assegno un testo ad esso: StyleableTextField (txt_genel.textDisplay). htmlText = ozet ['genelbilgiler'] come String; –
Se hai trovato un modo per farlo; ma non funziona, credo che dovrai condividere del codice per poter diagnosticare perché non funziona. – JeffryHouser
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? –
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