ランタイムCSSが変更されたときにFlexの複数行テキストが再計算されない
-
10-07-2019 - |
質問
ロード時間の考慮事項として、Flexアプリケーションでランタイムcssファイルを使用しています。
複数行のテキストコントロールに問題があります:
<mx:Text id="txtDescription" selectable="false"
styleName="imageRolloverButtonTextDark" width="100%" textAlign="center"
text="{_rolloverText}"/>
CSSスタイルシートがテキストスタイルをロードすると、正しく変更されますが、高さは再計算されません。一行のフィールドのように見えます。
FYI:コントロールは実際には表示されず、ロールオーバーによってトリガーされます。そのため、スタイルシートが読み込まれず、標準のシステムテキストが取得されるかどうかはあまり気にしません。ロードされたときに正しい高さになるようにします。
解決
この問題を抱えている他の人にとって、私が見つけた解決策は、mx.controls.Textを拡張するカスタムコンポーネントを作成することでした
次に、styleChange()メソッドをオーバーライドし、スタイルが適用されたら、テキストフィールドに対してinvalidateDisplayList()メソッドを明示的に呼び出します。
スタイルが変更されたときに自動的に呼び出される必要がありますが、Flex 3.5では何らかの理由で変更されません。
パブリッククラスTextObject extends Text {// ... オーバーライドpublic function styleChanged(styleProp:String):void {invalidateDisplayList(); } }
私がそれを失ったときはいつでも何かを救うことを願っています。
他のヒント
テキストに関するアドビのドキュメントごと
テキストコントロールのサイズ変更
フレックスのサイズ 次のようなテキストコントロール:
両方にピクセル値を指定した場合 高さと幅のプロパティ、任意 のサイズを超えるテキスト コントロールは境界でクリップされます。
明示的なピクセルを指定する場合 幅はあるが高さはない、Flexは 幅に合わせて計算するテキスト 必要な数に合う高さ 行の
パーセントベースを指定した場合 幅と高さなし、Flexはありません テキストを折り返し、高さが等しい によって決定される行数 リターン文字の数。
高さのみを指定し、いいえ 幅、高さの値は 幅の計算に影響し、Flex コントロールのサイズを幅に合わせます 最大行。
一般的なルールとして、あなたが長い場合 テキスト、ピクセルベースを指定する必要があります 幅プロパティ。テキストが 変更して、あなたが確実にしたい テキストコントロールは常に同じものを使用します アプリケーションのスペース、設定 明示的な高さと幅のプロパティ 予想される最大のテキストに適合します。
したがって、これに対処するために使用したトリックは、幅を制限するコンテナ(通常は直接の親)からバインディング式を介してテキストの幅を取得することです。
e.g。
<mx:Canvas id="box" width="100%" backgroundColor="Red">
<mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
100%ではなく固定ピクセル幅を使用できますか?以前、ダイナミックテキストコントロールで100%が誤って計算されるという問題がありました。