Il testo a più righe in Flex non viene ricalcolato quando viene modificato il runtime css

StackOverflow https://stackoverflow.com/questions/310729

  •  10-07-2019
  •  | 
  •  

Domanda

Per considerazioni sul tempo di caricamento sto usando un file css di runtime nella mia applicazione Flex.

Sto riscontrando un problema con un controllo di testo su più righe:

<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>

Quando il mio foglio di stile CSS ha caricato lo stile del testo cambia correttamente, ma l'altezza non viene ricalcolata. Sembra essere solo un campo a riga singola.

FYI: il controllo non è effettivamente visibile e attivato da un rollover. Quindi non mi interessa davvero se il foglio di stile non è stato caricato e ottengono un testo di sistema standard. Voglio solo che sia l'altezza corretta quando è stata caricata.

È stato utile?

Soluzione

Per chiunque abbia questo problema, la soluzione che ho trovato è stata quella di creare un componente personalizzato estendendo mx.controls.Text

e quindi sovrascrivere il metodo styleChange () e chiamare esplicitamente il metodo invalidateDisplayList () per il campo di testo una volta applicato lo stile.

Dovrebbe essere chiamato automaticamente quando lo stile è cambiato ma no ... per qualche motivo in Flex 3.5 non lo è.

TextObject di classe pubblica estende Text {// ... sovrascrive la funzione pubblica styleChanged (styleProp: String): void {invalidateDisplayList (); } }

Spero di salvarne qualcuno tutto il tempo che ci ho perso.

Altri suggerimenti

Secondo la documentazione Adobe per il testo

  

Dimensionamento di un controllo Text

     

Flex misura il   Controllo del testo come segue:

     

Se si specifica un valore in pixel per entrambi   le proprietà di altezza e larghezza, qualsiasi   testo che supera le dimensioni di   il controllo è troncato al confine.

     

Se si specifica un pixel esplicito   larghezza, ma senza altezza, Flex avvolge il file   testo per adattarsi alla larghezza e calcola   l'altezza per adattarsi al numero richiesto   di linee.

     

Se si specifica una percentuale   larghezza e nessuna altezza, Flex no   avvolgere il testo e l'altezza è uguale   il numero di righe determinato da   il numero di caratteri di ritorno.

     

Se si specifica solo un'altezza e no   larghezza, il valore dell'altezza no   influenza il calcolo della larghezza e Flex   ridimensiona il controllo per adattarlo alla larghezza di   la linea massima.

     

Come regola generale, se hai tempo   testo, è necessario specificare un pixel-based   proprietà width. Se il testo potesse   cambiare e si desidera garantire che il file   Il controllo del testo assume sempre lo stesso   spazio nell'applicazione, impostare   proprietà esplicite di altezza e larghezza   che si adatta al testo più ampio previsto.

Quindi il trucco che ho usato per affrontare questo è di far sì che il Testo ottenga la sua larghezza tramite un'espressione vincolante da qualunque contenitore limiti la sua larghezza, in genere il genitore immediato.

per es.

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>

Potresti usare una larghezza di pixel fissa invece del 100%? Ho avuto problemi con il 100% calcolato erroneamente su controlli dinamici di testo prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top