2021年5月1日土曜日

AndroidのSpinnerをちょっと変えてみる。

AndroidのUIのひとつにSpinnerがあります。

いくつかの候補から対象を選ぶときに最適なドロップダウン(プルダウン)リストが主な使い道です。見た目は違いますが、iOSならUIPickerViewがそれに相当します。

こんなの。



ところがこのSpinner、表示内容に対してwidthが十分取れないと残念な見た目になってしまいます。

ドロップダウンのリスト部分は画面に被って表示されますから、画面幅を超えない限り長くても大丈夫ですが、選択されたアイテムが表示されるSpinner自体はレイアウトに左右されます。

そこでどうしたいのかというと、ドロップダウンのリスト部分と選択されたアイテムの短縮形を表示したいのです。「ジミ・ヘンドリックス」を選ぶと「ジミヘン」になるようにね。


♪♪♪


標準的なSpinnerがセットアップされている前提です。


♪♪♪


まずは、ドロップダウンのリスト部分と選択されたアイテムのペアを格納するデータクラスを作成します。
値を入れて、取り出すだけなので処理は空っぽです。もちろん、凝った表示が必要なら処理を書きます。

Spinnerとリスト部分のレイアウトは基本的に変わりませんが、それぞれ名前(id)をつけます。


専用のカスタムアダプターを作成します。


あとは、データの型をStringからドロップダウンのリスト部分と選択されたアイテムのペアを格納するデータクラスに変更して、ArrayAdapterをカスタムアダプターに変更すればOKです。


これでこんな感じでいけます。

GitHubにこのサンプルを置いておきました。

やっぱりこれだよ、これ。