モバイルアプリの必須アイテム「リスト」
モバイルアプリで一覧表示に便利な「リスト」
モバイルアプリでは、「リスト」をよく使います。ただ、その機能は、Windowsアプリケーションなどで慣れ親しんだリストとはずいぶん違います。
スマートフォンを縦向きで使う場合、データは上下にスクロールしたほうが自然です。横幅に制限がある中で、データを分かりやすく表示するには、リストの項目に複数の情報を表示するようにしたくなるでしょう。
モバイルアプリのリストは、このような発想から進化してきたと想像されます。当然、進化の過程を異にするiOSとAndroidでは、外観が異なります。
iOSとAndroidのリスト
次の図は、iOSとAndroidの典型的なリストです。どちらも同じようにスクロールしますが、外観は少し違います。
Delphiでは、TListViewコンポーネントがこの用途のリストに当たります。Windowsからの流儀でいくと、TListが対応するコンポーネントのような気がするかもしれませんが、TListは、Windows同様、オプション項目を選択するような限られた機能に利用します。
TListViewを使用することで、アルバムアプリにも素敵な一覧機能が付きました。
プラットフォームコントロール
膨大なデータを扱う場合の問題
TListViewをこのような用途に使った場合、ちょっと困った問題が発生します。膨大な量の写真をリスト表示したとき、皆さんはよくスワイプ操作でとても速くスクロールさせて、目的の写真の近くまで移動させようとしませんか?
このようなときに、特にiOSでスクロールのパフォーマンス問題に直面することがあります。Delphiのマルチデバイスアプリケーションは、ネイティブコードで実行されますが、UIコントロールは、独自のレンダリング(GPUネイティブで実装されています)機能を使用します。つまり、外観はOSネイティブのコントロールのように見えますが、実際には、独自描画の機能を使っているのです。
OSネイティブのコントロールを使う
大規模データを扱うリストのように、パフォーマンスにシビアな場面では、ネイティブコントロールでないことによる負荷が悪影響を及ぼします。このような場面のために、Delphiでは、プラットフォームコントロールと呼ばれる機能が用意されています。
プラットフォームコントロールは、同じコンポーネントを使いながら、ControlTypeプロパティを切り替えるだけで、OSネイティブのコントロールに切り替わる機能です。これを用いれば、場面によってOSネイティブの機能を使い分け、パフォーマンスや機能面で満足いくものを提供できます。
プラットフォームコントロールを使うには
プラットフォームコントロールを使う手順は簡単です。コンポーネントを選択して、オブジェクトインスペクタで、ControlTypeプロパティをPlatformに設定するだけです。設計画面の外観は変わりませんが、プラットフォームコントロールであることを示すアイコンが右下に表示されます。
現在プラットフォームコントロールは、iOS、Windowsを中心にサポートされており、TEdit、TListView、TMemo、TSwitch、TCalendarといったコンポーネントで利用できます。