2009-08-31 12 views
2

フレックス3に複数行テキストを表示するための回避策がありますか?これまでに試した2つのコントロールは、mx:Textとmx:TextAreaです。各コントロールには独自のバグが関連付けられています。参考:mx:テキストバグ - http://bugs.adobe.com/jira/browse/SDK-9819 mx:TextAreaバグ - http://bugs.adobe.com/jira/browse/SDK-12616基本的に、高さを指定せず、テキストが次の行に折り返されていない場合、コントロールは正しくスクロールしません(高さは、折り返しに基づいてFlexによって動的に決定されます)。誰かが役に立つかもしれない回避策がありますか?フレックスに複数行テキスト回避策がありますか

ありがとうございました。

更新:私が過去に試みた方法の1つは、手動でmx:Text要素の高さを計算することでした。私は、次を使用してこれを行うことができます。

var textItem:Text = new Text(); 
var len:int = value.length; 
var lines:int = int(len/115) + 1; 
var height:int = lines * 20; 
textItem.height = height; 

これは、MXで問題を回避するために思えますが:テキストは、一つの大きな障害があります。計算は、フォントサイズ、文字間隔、およびtextItemの幅に大きく依存します。私はこの方法を使用して、私のプロジェクトに進むことができます。しかし、これを維持することは避けられず、このようなコードでは、巨大なPITAになります。

+0

なぜあなたはできません高さを指定しますか? –

+0

このフィールドに入力するテキストの長さは0〜1024文字です。 1024の辺の大文字の高さを指定すると、UIは1つまたは2つの単語列で空白に見えます。私は試した別のケースで質問を更新します。 –

答えて

7

私はこれを数回自分で処理しなければなりませんでした。 <mx:Text>の動的な高さのサイジングを得るための最良の方法は、テキストから高さを除いて、囲みVBox、HBoxなどで100%の高さを指定することです。次のようなものがあなたのために働くはずです:

<mx:VBox width="100%" height="100%"> 
    <mx:Text text="Your really long text goes here." width="100%"/> 
</mx:VBox> 

これはハックそのものです。

編集

あなたは、コードのメンテナンスが容易になるように、あなたの上記の例を拡張したい場合は、TextLineMetricsクラスにになっているはずです。これにより、フォント、サイズなどを考慮して、テキストの幅と高さを測定できます。TextLineMetricsのドキュメントはhereです。あなたの上記の例を使用するには、次のような何かをしたいと思います:

var textItem:Text = new Text(); 
var metrics:TextLineMetrics = textItem.measureText(value); 
var len:int = metrics.width; 
var lines:int = int(len/textItem.width) + 1; 
var height:int = lines * metrics.height; 
textItem.height = height; 
+0

私はこれを試して、それがどうなるかを見ていきます。ありがとう。 –

+0

TextLineMetricsオブジェクトはここで勝つように見えます。試したほとんどのケースで、メトリクスを作成する前にtextItemを親に追加する必要があったと私は言います。それ以外の場合は、アンチエイリアスエラーが発生します。 –

1

私は私のために非常にうまく機能高さ可変テキスト領域クラスを使用します。

package 
{ 
    import mx.controls.TextArea; 

    /** 
    * TextArea that xpands to the height of the content contained 
    * within. 
    * @author joel 
    * 
    */ 
    public class VariableHeightTextArea extends TextArea 
    { 
     public function VariableHeightTextArea() 
     { 
      super(); 
     } 

     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void 
     { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
      if(this.height != int(this.textField.measuredHeight) + 5) 
      { 
       this.height = this.textField.measuredHeight + 5; 
      }   
     } 
    } 
} 
+0

これは便利なクラスのようですが、Bug#12616(上にリンクされています)は本当に私がTextAreaを使用するのを止めています。 TextAreasがスクロールイベントを処理する方法はかなり不自由です。 –

関連する問題