FireMonkey ビューの使用

提供: Appmethod Topics
移動先: 案内検索

FireMonkey アプリケーションの設計 への移動

ビューとは、アプリケーションのフォームに対して、アプリケーションが動作するデバイスに応じて異なるレイアウトやコンポーネントを定義するためのメカニズムです。

新しく作成したフォームには、最初はデフォルト名が unit1.fmx[マスタ]ビューという 1 つのビューが含まれます。


MultipleViews.png

ビューの継承

プロジェクトに追加したビューはどれも、[マスタ]ビューのコンポーネントとそのプロパティを継承します。

[マスタ]ビューのコンポーネントの追加や削除を行うと、フォーム デザイナによりその変更がすべての既存のビューに反映されます。コンポーネントの追加や削除ができるのは[マスタ]ビューでのみです。他のビューでコンポーネントの追加や削除を行うことはできません。あるコンポーネントを特定のビューでのみ表示したい場合には、他のビューでそのコンポーネントを非表示にすることができます。

フォームやそのコンポーネントのプロパティを[マスタ]ビューで変更すると、その変更もフォーム デザイナにより既存のビューに反映されます。ただし、そのビューでそのプロパティに異なる値が既に指定されている場合は反映されません。特定のビューでプロパティの値をカスタマイズし、そのビューでのみ[マスタ]ビューの値を上書きすることができます。

プロパティを[マスタ]のコンポーネントの値に戻す

別のビューのコンポーネントのプロパティ値を[マスタ]ビューの値に戻すには:

  1. ビュー セレクタで該当するビューを選択します。
  2. フォーム デザイナで対象のコンポーネントを右クリックします。
  3. コンテキスト メニューから[継承元の値に戻す]を選択します。

選択したコンポーネントのすべてのプロパティが[マスタ]ビューの値に戻されます。

コンポーネントを非表示にする

ビューからコンポーネントを削除することはできませんが、そのコンポーネントを非表示にすることは可能です。

特定のビューでコンポーネントを非表示にするには:

  1. コンポーネントを選択します。
  2. [オブジェクト インスペクタ]Visible プロパティを False に設定します。

特定のターゲット プラットフォームでコンポーネントを非表示にするには、コード エディタで次のような場合分けのコードを記述します。

Object Pascal の場合:

{$IFDEF ANDROID}
    SpeedButton1.Visible := False;
{$ENDIF}
C++ の場合:
#if defined(__ANDROID__) && defined(__arm__)
    SpeedButton1->Visible = false;
#endif

このコードを、たとえばフォームの OnCreate イベントに関連付けられたイベント ハンドラで実行することができます。実行時にコンポーネントを非表示に変更するため、フォーム デザイナではコンポーネントは表示されたままになります。

ビューの読み込みのアルゴリズム

デバイス上でアプリケーションを実行すると、FireMonkey はアプリケーションに定義されたビューを評価し、優先度順のリストを作成します。このリストにはアプリケーションが動作しているのと同じプラットフォームのビューだけが含まれ、リスト内の各ビューの優先度は以下の基準で判断されます。この表は、優先度の高いもの(1)から低いものへと順に記載されています。

優先度 要件

1

  • アプリケーションが動作しているデバイスの対角線が、当該ビューの対角線の範囲 [最小対角線, 最大対角線] に含まれる。
  • すべてのビューの対角線の範囲の中で、当該ビューの対角線の範囲が、アプリケーションの動作しているデバイスの対角線に最も近い。
  • 当該ビューのデバイス クラスが、アプリケーションの動作しているデバイスのクラスと同じである。

2

  • アプリケーションが動作しているデバイスの対角線が、当該ビューの対角線の範囲 [最小対角線, 最大対角線] に含まれる。
  • すべてのビューの対角線の範囲の中で、当該ビューの対角線の範囲が、アプリケーションの動作しているデバイスの対角線に最も近い。
  • 当該ビューのデバイス クラスが、アプリケーションの動作しているデバイスのクラスと異なる。
  • 当該ビューが専用のものではない。

3

  • 当該ビューが専用のものではない。
メモ: 優先度がこのレベルのビューは、ビューの対角線の範囲の平均(たとえば、最小が 4 で最大が 6 であれば 5)とアプリケーションの動作しているデバイスの対角線との差によって順に並べられます。差が少ないビューほど優先度が高くなります。

FireMonkey はリスト内の最初のビューを読み込みます。どの要件を満たすビューもない場合には、FireMonkey は[マスタ]ビューを読み込みます。

Appmethod の組み込みビューの詳細は、System.Devices ユニットのプラットフォーム固有の実装(System.Android.Devices.pasSystem.Win.Devices.pas など)を参照してください。

各 Android ビューに一致するデバイス サイズの範囲

Android アプリケーションでどのビューを使用するかを判断するために、サイズの範囲が使用されます。以下の表に、各ビューの範囲を横長の座標で示します。実行時にビューを選択する際に、正確に一致する必要はありません。最も近いものが選択されます。

ビュー名 最小サイズ
(ピクセル)
最大サイズ
(ピクセル)
PPI

[Android 3.5 インチ スマートフォン]

800 x 500

1000 x 600

320

[Android 4 インチ スマートフォン]

1168 x 730

1360 x 850

320

[Android 5 インチ スマートフォン]

1440 x 900

1708 x 960

320

[Android 7 インチ タブレット]

1708 x 960

1920 x 1200

320

[Android 10 インチ タブレット]

2400 x 1500

2560 x 1600

320

実行時に異なるフォーム名が使われる

実行時に、アプリケーションのフォームの Name プロパティが、設計時に定義した名前と一致しないことがあります。FireMonkey が[マスタ]以外のビューを読み込むと、フォームの名前は、[マスタ]ビューでフォームに付けた名前と読み込んだビューのコード名とをアンダースコア(_)でつなげたものになります。たとえば、フォームの名前が "MyForm" で、FireMonkey が実行時に "Windows デスクトップ" ビューを読み込んだ場合、フォームの実行時の名前は "MyForm_Windows" になります。

無名コンポーネントの場合はビューを作成できない

プロジェクトのビューを新しく作成するには、まず、プロジェクト内のすべてのコンポーネントに名前が付いている必要があります。

名前のないコンポーネントを含んだビューが 1 つ以上あるマルチデバイス アプリケーションを開くと、次のようなエラー メッセージが表示されます。

 Cannot inherit from form <form name>.  It contains a component with a blank name property.

関連トピック

関連項目