0

読み込み時間の考慮事項として、Flex アプリケーションでランタイム css ファイルを使用しています。

複数行のテキスト コントロールに問題があります。

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

CSS スタイルシートが読み込まれると、テキスト スタイルは正しく変更されますが、高さは再計算されません。単一の行フィールドのように見えます。

参考: コントロールは実際には表示されず、ロールオーバーによってトリガーされます。そのため、スタイルシートが読み込まれておらず、標準のシステム テキストが取得されているかどうかは気にしません。ロードされたときに正しい高さになりたいと思います。

4

3 に答える 3

3

テキストに関するAdobeのドキュメントによると

テキスト コントロールのサイズ変更

Flex は Text コントロールのサイズを次のように設定します。

高さと幅の両方のプロパティにピクセル値を指定すると、コントロールのサイズを超えるテキストは境界線で切り取られます。

明示的なピクセル幅を指定して高さを指定しない場合、Flex は幅に合わせてテキストを折り返し、必要な行数に合わせて高さを計算します。

パーセンテージ ベースの幅を指定し、高さを指定しない場合、Flex はテキストを折り返さず、高さは Return 文字の数によって決定される行数と等しくなります。

高さのみを指定して幅を指定しない場合、高さの値は幅の計算に影響を与えず、Flex は最大線の幅に合わせてコントロールのサイズを変更します。

原則として、テキストが長い場合は、ピクセルベースの幅プロパティを指定する必要があります。テキストが変更される可能性があり、テキスト コントロールがアプリケーション内で常に同じスペースを占めるようにする場合は、予想される最大のテキストに適合する明示的な高さと幅のプロパティを設定します。

したがって、これに対処するために私が使用したトリックは、テキストの幅を制限するコンテナー (通常は直接の親) からバインディング式を介してテキストの幅を取得することです。

例えば

<mx:Canvas id="box" width="100%" backgroundColor="Red">
    <mx:Text width="{box.width}" text="{someReallyLongString}" />
</mx:Canvas>
于 2009-07-11T01:17:54.557 に答える
1

この問題を抱えている他の人にとって、私が見つけた解決策は、 mx.controls.Text を拡張するカスタムコンポーネントを作成することでした

次に、styleChange() メソッドをオーバーライドし、スタイルが適用されたら、テキスト フィールドの invalidateDisplayList() メソッドを明示的に呼び出します。

スタイルが変更されたときに自動的に呼び出されるはずですが、そうではありません...何らかの理由でflex 3.5ではそうではありません。

public class TextObject extends Text { //... override public function styleChanged(styleProp:String):void { invalidateDisplayList(); } }

私がそれで失ったすべての時間を誰かを救うことを願っています。

于 2010-06-17T12:33:56.353 に答える
0

100% の代わりに固定ピクセル幅を使用できますか? 以前、ダイナミック テキスト コントロールで 100% が誤って計算されるという問題がありました。

于 2008-11-22T17:11:13.420 に答える