4

Flex コンポーネント フレームワークを使用してカスタム Flex コンポーネントを作成しようとしています。

http://www.adobe.com/livedocs/flex/3/html/help.html?content=ascomponents_advanced_3.html

すべての優れたコンポーネントでは、以下を使用してパーセンテージ値を使用して寸法を定義できます。

MXML:

TextInput width="100%"

また

実行時のアクションスクリプト:

textinp.percentWidth = 100;

私の質問は、カスタム コンポーネントの measure() メソッドでパーセンテージ幅/高さをどのように実装するのですか? より具体的には、これらのパーセンテージはある段階でピクセル値に変換されますが、これはどのように行われますか?

4

1 に答える 1

6

Flex レイアウトが機能する方法は、各コンポーネントがその子を親によって指定されたサイズにレイアウトできるようにすることです。「子」には、通常の子である getChildren()、numChildren と、「chrome」と呼ばれ、getRawChildren() の一部である、ボーダーやハンドルなどを構成するコンポーネントも含まれます。

Flex フレームワークは、すべてのコンポーネント (実際には表示ツリーの一部) に対して 2 つのループを実行するようになりました。1 つ目はボトムアップ (最も深くネストされた要素が最初) で、measure() メソッドを呼び出します。必要なだけのスペースがあり、制限がなく (スクロールバーを考えてください)、コンポーネントが必要とするスペース (幅/高さ) を計算し、それをmeasuredWidth およびmeasuredHeight プロパティに入れる必要があります。次に、絶対最小値としてどのくらいのスペースが必要かを計算し、measuredMinHeight/measuredMinWidth に入れます。これを計算するには、getExplicitOrMeasuredHeight()/Width() を使用して境界線の太さ、クロム、および通常の子のサイズを尋ね、合計します。そのため、深さ優先です。

2 番目のループは、実際のレイアウトを行うことです。これはツリーの一番上から始まり、updateDisplayList が呼び出され、x/y パラメーターがコンポーネントに実際のサイズを伝えます。この情報に基づいて、コンポーネントは直接の子に、(親に対して相対的な) どこにあるべきか、どのくらいの大きさであるべきかを伝えます - child.move(x,y) および child.setActualSize(w,h)

したがって、実際には、相対的なサイズを考慮に入れるのは親コンテナーです。あなたのコンポーネントは、それが理想的(すべてを表示できるようにするための最小サイズ)であり、メジャー()で最小サイズであると述べており、updateDisplayList()で取得したものを処理する必要があります。親コンポーネントは利用可能なスペースを取り、各コンポーネントが最小サイズになるようにしてから、残りをすべてのコンポーネントに分配します。このフェーズでは、子の percentWidth/Height プロパティを調べます。

したがって、コンポーネントを HBox のような標準の Flex コンテナーに配置する場合、パーセンテージ サイズを機能させるために特別なことをする必要はありません。

于 2010-06-22T10:55:06.517 に答える