在 Android 中,Spinner 是一種用來顯示下拉選單的 UI 元件,當使用者點擊它時,會展開一個選項清單供選擇。適用於要讓使用者從多個選項中選一個的情境,Spinner 適合用來取代 RadioButton 或單選 Dialog,在選項數量較多或畫面空間有限時特別實用。
Spinner 有兩種顯示模式:第一種是下拉式(dropdown),第二種是對話式(dialog)。
我們可以透過 android:spinnerMode="..." 屬性來指定顯示模式。
這篇主要介紹「下拉式(dropdown)」的 Spinner,關於對話式的 Spinner 之後會在 Dialog 相關文章中介紹
activity_main
Spinner的元件設定跟其他元件差不多,一樣直接拉取即可
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="100dp"/>
MainActivity
首先建立一組字串陣列來作為下拉選單的選項,排列順序就是到時候顯示出來的順序
final String[] str={"第一項","第二項","第三項","第四項","第五項"};
接著建立ArrayAdapter,設定Spinner的項目樣式,而setDropDownViewResource設定的是Spinner的下拉選單樣式,因為沒有特別要求所以都是設置成預設的,如果有想要調整也可以自訂樣式再套用,建立ArrayAdapter後就能透過setAdapter來設定Spinner 的資料來源,這樣,我們的程式碼就寫好啦~
ArrayAdapter<String> strList = new ArrayAdapter<>(
MainActivity.this,
android.R.layout.simple_spinner_item, // 注意:此為 Spinner 預設項目的樣式
str
);
spinner.setAdapter(strList);// 設定 Spinner 的資料來源為strList
// 設定下拉選單列表項目的顯示樣式
strList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
然後我們來設定 Spinner 的選項變更監聽器,可以分別設定被選取和沒被選取時觸發的事件,那我這邊是設置被選擇後就透過Toast來在底部提示使用者選擇的選項
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override// 被選取時的動作
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 用 Toast 顯示目前選擇的項目文字
Toast.makeText(MainActivity.this,"您選擇了"+
spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// 沒有被選取時的動作
}
});
完整程式碼:
//記得在最上方加上import
import android.widget.ArrayAdapter;// 用來設定 Spinner 的資料來源
import android.widget.Spinner;// 下拉選單元件
// 建立一組字串陣列,作為下拉選單項目
final String[] str={"第一項","第二項","第三項","第四項","第五項"};
// 建立 ArrayAdapter,連結字串陣列與 Spinner
ArrayAdapter<String> strList = new ArrayAdapter<>(
MainActivity.this,
android.R.layout.simple_spinner_item, // 注意:此為 Spinner 預設項目的樣式
str
);
spinner.setAdapter(strList);// 設定 Spinner 的資料來源為strList
// 設定下拉選單列表項目的顯示樣式
strList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 設定 Spinner 的選項變更監聽器
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override// 被選取時的動作
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 用 Toast 顯示目前選擇的項目文字
Toast.makeText(MainActivity.this,"您選擇了"+
spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// 沒有被選取時的動作
}
});
執行成果展示: