Flex は、一連の規則に従ってコンポーネントのレイアウトを制御します。レイアウト規則は、個々のコンポーネントのサイズ設定規則と、コンテナのサイズ設定規則および配置規則を組み合せたものです。Flex では自動レイアウトをサポートしているので、多くの場合、最初にコンポーネントのサイズまたは位置を設定する必要はありません。レイアウトの制御は Flex に任せ、開発者はアプリケーションのロジックの構築に専念することができます。必要に応じて、後でインスタンスのサイズを調整できます。
各コンテナには、レイアウトを制御するための独自の規則があります。例えば、VBox コンテナでは、子は 1 つの列にレイアウトされます。Grid コンテナでは、子は行および列のセルにレイアウトされます。パディングは、Application コンテナでは 24 ピクセル、他の多くのコンテナでは 0 ピクセルです。
Flex にはビルトインのデフォルトレイアウト規則がありますが、コンポーネントのプロパティとメソッドを使用してレイアウトをカスタマイズできます。すべてのコンポーネントには、height や width など、コンポーネントのサイズを絶対値またはコンテナに対する相対値で指定するための複数のプロパティがあります。各コンテナにも、レイアウト属性の設定に使用できるプロパティとスタイルがあります。Tile コンテナの verticalGap スタイルや horizontalGap スタイルなどの設定を使用して子同士の間隔を設定したり、direction プロパティで行または列のレイアウトを指定したりできます。コンテナ内のコンポーネントをレイアウトする際に様々な配置手法を使用することもできます。例えば、一部のコンテナでは、x 絶対座標と y 絶対座標に基づく配置をサポートしています。
Flex では、Layout Manager によってレイアウトが制御されます。Layout Manager は、次の 3 段階のプロセスでアプリケーション内の各コンポーネントのサイズと位置を決定します。
第 1 段階 - 処理パス
アプリケーションの各コンポーネントのプロパティ設定を決定します。この段階では、コンテンツがプロパティ設定に依存するコンポーネントを、Flex によってサイズと位置が決定される前に設定できます。
処理パスでは、各コンポーネントは Layout Manager の指示で commitProperties() メソッドを実行してプロパティ値を決定します。
第 2 段階 - 計算パス
アプリケーション内のすべてのコンポーネントのデフォルトサイズを計算します。このパスは、最も深くネストされたコンポーネントから始まり、Application コンテナに向けて進みます。計算パスでは、各コンポーネントの測定サイズ(デフォルトサイズ)が決定されます。各コンテナのデフォルトサイズは、子のデフォルトサイズまたは明示的なサイズ(指定されている場合)に基づきます。例えば、Box コンテナのデフォルトの幅は、すべての子のデフォルトの幅または明示的な幅の合計に、境界線の太さ、パディング、子同士の間隔を加えたものと等しくなります。
計算パスでは、各コンポーネントは Layout Manager の指示で measureSizes() メソッド(measure() メソッドを呼び出すプライベートメソッド)を実行して、コンポーネントのデフォルトサイズを決定します。
第 3 段階 - レイアウトパス
コンポーネントの移動やサイズ変更などを行って、アプリケーションをレイアウトします。このパスは最も外側のコンテナから始まり、最も内側のコンポーネントに向けて進みます。レイアウトパスでは、各コンポーネントの実際のサイズと配置が決定されます。また、lineTo() メソッドや drawRect() メソッドの呼び出しなど、プログラムによる描画も実行されます。
レイアウトパスでは、Flex は、コンポーネントのサイズ設定プロパティで親に対するパーセント値としてサイズが指定されているかどうかを判別し、その設定を使用して子コンポーネントの実際のサイズを決定します。各コンポーネントは Layout Manager の指示で updateDisplayList() メソッドを実行して、コンポーネントの子をレイアウトします。そのため、このパスを「更新パス」と呼ぶこともあります。
Flex では、位置とサイズを決定する際に次の基準系を使用します。
Flex では、パーセント値ベースのサイズを決定するとき、および制約ベースのレイアウトを実行するときに可視領域を使用します。
絶対配置を指定するときに使用する Flex コンポーネントの x プロパティと y プロパティは、コンテンツ座標系にあります。
Flex 座標系の詳細については、Flex 座標の使用を参照してください。
コンポーネントの高さと幅は、計算パスとレイアウトパスで決定されます。これらのサイズを取得するには、height プロパティと width プロパティを使用します。これらのプロパティや他のプロパティを使用して、コンポーネントのサイズを制御できます。
Flex では、次の方法でコントロールとコンテナのサイズを制御できます。
デフォルトサイズ設定
コントロールとコンテナのサイズが自動的に決定されます。
明示的なサイズ設定
height プロパティと width プロパティを絶対値に設定します。
パーセント値ベースのサイズ設定
コンポーネントのサイズをコンテナのサイズに対するパーセント値で指定します。
制約ベースのレイアウト
コンポーネントの端をコンテナ内の特定の位置に固定することにより、サイズと位置を制御します。
コンポーネントのサイズの制御の詳細については、コンポーネントのサイズ設定を参照してください。
Flex では、アプリケーションを初期化するときにコンポーネントを配置します。また、アプリケーションまたはユーザーがビジュアルエレメントのサイズまたは位置に影響する可能性のある何らかの操作を実行した場合にも、レイアウトパスを実行し、コンポーネントを配置または再配置します。例えば、次のような場合です。
まれに、アプリケーションプログラマがコンポーネントのレイアウトを強制的に実行することが必要な場合があります。詳細については、レイアウトの手動での強制実行を参照してください。
Flex は、コントロールの配置とレイアウトのための次の 2 つのメカニズムを備えています。
自動配置
Flex は、コンテナおよびコンポーネントに固有の一連の規則に従って、コンテナの子を自動的に配置します。Box、Grid、Form などのほとんどのコンテナでは、自動配置を使用します。自動配置は、「自動レイアウト」と呼ばれることもあります。
絶対配置
それぞれの子の x プロパティと y プロパティを指定するか、制約ベースのレイアウトを使用します。制約ベースのレイアウトでは、コンテナの 1 つまたは複数の端と子の端、ベースラインまたは中心との距離を指定します。絶対配置は、「絶対レイアウト」と呼ばれることもあります。
絶対配置は、次の 3 種類のコンテナでサポートされています。
コントロールの位置の制御の詳細については、コントロールの配置とレイアウトを参照してください。
Flex では、コンテナとその子をレイアウトする際に、コンテナのタイプによってそれぞれ異なるレイアウトパターンを使用します。通常、これらのパターンは、次の表に分類されたタイプのいずれかに一致します。この表は、各タイプの一般的なレイアウト動作、コンテナのデフォルトサイズの決定方法およびパーセント値ベースの子のサイズ設定方法をまとめたものです。
|
コンテナのタイプ |
デフォルトのレイアウト動作 |
|---|---|
|
絶対配置:Canvas コンテナ、または layout="absolute" が指定されている Application または Panel コンテナ |
一般的なレイアウト: コンテナの子が相互に影響し合うことはありません。つまり、ある子の位置がその他の子の位置に影響することはなく、子同士が重なって表示される場合があります。子の位置を明示的に指定するか、制約を使用して子の端、ベースラインまたは中心を親コンテナに対して相対的に固定します。 デフォルトサイズ設定: 計算パスで下端が最も下にある子と右端が最も右にある子が特定され、それらの値を使用してコンテナのサイズが決定されます。 パーセント値ベースの子: サイズ設定では、制約ベースのレイアウトと、x 座標および y 座標による配置のどちらを使用しているかによって異なる規則が使用されます。詳細については、絶対配置を使用したコンテナでのパーセント値ベースの子のサイズ設定を参照してください。 |
|
すべての子を直線的に配置するコントロール(Box、HBox、VBox など) |
一般的なレイアウト: コンテナのすべての子が 1 つの行または列に配置されます。それぞれの子の高さと幅は、他のすべての子の高さまたは幅と異なる場合があります。 デフォルトサイズ設定: すべての子のデフォルトサイズまたは明示的なサイズとすべての間隔、境界線およびパディングが収まるようにコンテナのサイズが決定されます。 パーセント値ベースの子: パーセント値ベースのサイズ設定を使用する子が要求するサイズが使用可能領域よりも大きい場合、要求されたパーセント値に比例するサイズの領域に収まるように実際のサイズが設定されます。 |
|
Grid |
一般的なレイアウト: このコンテナは、実質的には、すべてのアイテムが整列するように制約された HBox 子コントロールの行を含む VBox コントロールです。1 つの行に含まれるセルの高さはすべて同じですが、行ごとに高さを変えることができます。また、1 つの列に含まれるセルの幅はすべて同じですが、列ごとに幅を変えることができます。Grid コンテナの行または列ごとに異なる数のセルを定義することができ、個々のセルが複数の列または行にまたがってもかまいません。 デフォルトサイズ設定: 個々の行および子がデフォルトサイズで収まるようにグリッドのサイズが決定されます。 パーセント値ベースの子: 子がパーセント値ベースのサイズ設定を使用している場合、リニアコンテナのサイズ設定規則に従って、子 GridItem コンポーネントは行内に、GridRow コンポーネントはグリッドサイズ内にそれぞれ収められます。 |
|
Tile |
一般的なレイアウト: このコンテナは、同じサイズのセルがグリッド状に並んだものです。セルの順序は、行優先にも列優先にもできます。 明示的なサイズまたはパーセント値ベースのサイズを指定しない場合、必要に応じて、より多くのアイテムを含む方向を決定する direction プロパティが使用され、コントロールの行数と列数は可能な限り同数に近づきます。 デフォルトサイズ設定: tileWidth プロパティと tileHeight プロパティを指定しない場合、コンテナでは最大の子セルの測定サイズまたは明示的なサイズが各子セルのサイズに使用されます。 パーセント値ベースの子: 子コンポーネントのパーセント値ベースのサイズは、Tile コンテナに対するパーセント値ではなく、個々のセルに対するパーセント値を指定します。 |
|
ナビゲータ:ViewStack、Accordion、TabNavigator |
一般的なレイアウト: このコンテナは、子を 1 つずつ表示します。 デフォルトサイズ設定: コンテナのサイズは、最初に選択された子の測定サイズまたは明示的なサイズによって決定されます。その後、残りのすべての子にその初期サイズが適用されます。resizeToChild プロパティを true に設定すると、それぞれの子が表示されたときに、その子の測定サイズまたは明示的なサイズに合わせてコンテナのサイズが変更されます。 パーセント値ベースの子: 原則として、高さと幅の両方に 100 %を指定するか、パーセント値ベースのサイズ設定を使用しないようにします。前者の場合、子がナビゲータの範囲全体を満たします。 |
Flex では、次の基本規則に従ってレイアウトを実行します。これらの規則を覚えておくと、Flex でのレイアウトの詳細を理解しやすくなり、アプリケーションがそのようにレイアウトされた理由や、アプリケーションの外観を変更する方法を判断する上で役立ちます。
Flex でのコンポーネントのサイズ設定方法の詳細については、コンポーネントのサイズの決定と制御を参照してください。コンポーネントの配置の詳細については、コントロールの配置とレイアウトを参照してください。
プログラムによってコンポーネントを再度レイアウトすることが必要になる場合があります。通常、Flex は、大量の計算を必要とするプロパティをスクリプトによって設定するときに、そのスクリプトの実行が終了するまでそれらのプロパティの処理を遅延します。例えば、width プロパティを設定すると、オブジェクトの子またはその親の幅の再計算が必要となることがあるので、このプロパティの設定は遅延されます。処理を遅延することにより、スクリプトで width プロパティが複数回設定された場合に、その処理を何度も繰り返すのを防ぐことができます。ただし、スクリプトが完了する前に、レイアウトを強制的に実行することが必要になる場合もあります。
レイアウトを強制的に実行する必要がある状況として、次のような場合が考えられます。
レイアウトを強制的に実行するには、レイアウトする必要のあるコンポーネントの validateNow() メソッドを呼び出します。このメソッドを呼び出すと、オブジェクトとそのすべての子のプロパティ、サイズおよびレイアウトが検証および更新され、必要に応じて再描画されます。このメソッドは計算負荷が高いので、必要な場合にのみ呼び出すように注意してください。
validateNow() メソッドの使用例については、PrintDataGrid レイアウトの更新を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート