ユーザーにちょっとした項目を選択してもらいたいときに便利なのはSpinnerです。プルダウンで選択項目が現れる簡単なアプリを作ってみましょう。
Android 7.1.1
Spinner
Spinnerの構成は ListView に似ています。
- 選択肢を設定する
- Spinnerのインスタンスを生成して、Adapterを設定
- 選択肢が選択された時の処理を記述
1. 選択させたい項目を作ります。例えば配列
1 |
String spinnerItems[] = {"Spinner", "Spinner 1", "Spinner 2", "Spinner 3"}; |
この項目の作成方法は色々あります。resourceでリストを作ったり、Spinnerに要素をaddしたり。私は要素を把握しやすいのでいつもArrayListか配列にします。
2. ArrayAdapterに設定します。
これを使うと、その選択肢を良い具合に並べてる設定をしてくれます。
1 2 |
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems); |
simple_spinner_item はプラットフォームによって提供され、デフォルトのレイアウトとして使用できます。レイアウトを自分で作成する必要はありません。
1 |
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
setDropDownViewResource(int) 、ユーザーが選択しようとするときにドロップダウンによりリストを表示するのに使うレイアウトを指定します。
simple_spinner_dropdown_item もプラットフォームで定義された標準的なレイアウトですので、このレイアウトも作る必要はありません。
3. Spinner にリスナーを登録、選択された場合の挙動を記述します。
Spinner オブジェクトが on-item-selected イベントを取得する時にAdapterView.OnItemSelectedListener インターフェースと、対応する onItemSelected() コールバック メソッドを実装します。
まとめてみるとこうなります
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private Spinner spinner; // 選択肢 private String spinnerItems[] = {"Spinner", "Android", "Apple", "Windows"}; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.text_view); spinner = (Spinner)findViewById(R.id.spinner); // ArrayAdapter ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // spinner に adapter をセット spinner.setAdapter(adapter); // リスナーを登録 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { // アイテムが選択された時 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner = (Spinner) parent; String item = (String) spinner.getSelectedItem(); if (item.equals("Android")) { textView.setText("Android"); } else if (item.equals("Apple")) { textView.setText("Apple"); } else if (item.equals("Windows")) { textView.setText("Windows"); } else { textView.setText("Spinner"); } } // アイテムが選択されなかった public void onNothingSelected(AdapterView<?> parent) { // } }); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#cfd" android:orientation="vertical" android:gravity="center_horizontal" tools:context=".MainActivity"> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#00f" android:layout_marginTop="100dp" android:textSize="40sp" /> <Spinner android:id="@+id/spinner" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_margin="20dp" android:background="#fff" /> </LinearLayout> |
Spinnerの文字サイズを変更したい場合は、レイアウトをカスタムで ArrayAdapter に設定するとできます。
References:
Spinners
ArrayAdapter