FireMonkey ビューの使用
目次
ビューとは、アプリケーションのフォームに対して、アプリケーションが動作するデバイスに応じて異なるレイアウトやコンポーネントを定義するためのメカニズムです。
新しく作成したフォームには、最初はデフォルト名が unit1.fmx
の[マスタ]ビューという 1 つのビューが含まれます。
- [マスタ]ビューは、アプリケーションが動作しているデバイスに適したビューがアプリケーションにほかに含まれていない場合に、アプリケーションに読み込まれるビューです。
- さまざまなデバイス用に異なるビューを用意したい場合には、アプリケーションにビューを追加することができます。
- スマートフォンやタブレットなど基本デバイスの代表的な種類向けのビューを作成することをお勧めします。ビュー セレクタで使用可能なすべてのビューを作成することは推奨しません。
ビューの継承
プロジェクトに追加したビューはどれも、[マスタ]ビューのコンポーネントとそのプロパティを継承します。
[マスタ]ビューのコンポーネントの追加や削除を行うと、フォーム デザイナによりその変更がすべての既存のビューに反映されます。コンポーネントの追加や削除ができるのは[マスタ]ビューでのみです。他のビューでコンポーネントの追加や削除を行うことはできません。あるコンポーネントを特定のビューでのみ表示したい場合には、他のビューでそのコンポーネントを非表示にすることができます。
フォームやそのコンポーネントのプロパティを[マスタ]ビューで変更すると、その変更もフォーム デザイナにより既存のビューに反映されます。ただし、そのビューでそのプロパティに異なる値が既に指定されている場合は反映されません。特定のビューでプロパティの値をカスタマイズし、そのビューでのみ[マスタ]ビューの値を上書きすることができます。
プロパティを[マスタ]のコンポーネントの値に戻す
別のビューのコンポーネントのプロパティ値を[マスタ]ビューの値に戻すには:
選択したコンポーネントのすべてのプロパティが[マスタ]ビューの値に戻されます。
コンポーネントを非表示にする
ビューからコンポーネントを削除することはできませんが、そのコンポーネントを非表示にすることは可能です。
特定のビューでコンポーネントを非表示にするには:
- コンポーネントを選択します。
- [オブジェクト インスペクタ]で Visible プロパティを
False
に設定します。
特定のターゲット プラットフォームでコンポーネントを非表示にするには、コード エディタで次のような場合分けのコードを記述します。
Delphi の場合:
{$IFDEF ANDROID}
SpeedButton1.Visible := False;
{$ENDIF}
#if defined(__ANDROID__) && defined(__arm__)
SpeedButton1->Visible = false;
#endif
このコードを、たとえばフォームの OnCreate イベントに関連付けられたイベント ハンドラで実行することができます。実行時にコンポーネントを非表示に変更するため、フォーム デザイナではコンポーネントは表示されたままになります。
ビューの読み込みのアルゴリズム
デバイス上でアプリケーションを実行すると、FireMonkey はアプリケーションに定義されたビューを評価し、優先度順のリストを作成します。このリストにはアプリケーションが動作しているのと同じプラットフォームのビューだけが含まれ、リスト内の各ビューの優先度は以下の基準で判断されます。この表は、優先度の高いもの(1)から低いものへと順に記載されています。
優先度 | 要件 |
---|---|
1 |
|
2 |
|
3 |
|
FireMonkey はリスト内の最初のビューを読み込みます。どの要件を満たすビューもない場合には、FireMonkey は[マスタ]ビューを読み込みます。
RAD Studio の組み込みビューの詳細は、System.Devices ユニットのプラットフォーム固有の実装(System.Android.Devices.pas
や System.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.
関連トピック
関連項目
- フォーム デザイナ(「ビュー セレクタ」セクション)