1. 程式人生 > >Android中Spinner用法詳解

Android中Spinner用法詳解

java.lang.Object

android.view.View

        android.view.ViewGroup

                android.widget.AdapterView<T extends android.widget.Adapter>

                        android.widget.AbsSpinner

                                android.widget.Spinner

從上面的繼承關係可以看出這個控制元件其實很像listview,載入的資料和listview很相似.

Spinner、listview、Gallery都繼承了AbsSpinner,AbsSpinner繼承了AdapterView,因此他也表現出AdapterView的特徵:只要為AdapterView提供Adapter即可。

首先介紹些常用屬性:

android:spinnerMode //顯示模式 :popu和dialog兩種

android:dropDownWidth="230dp"//顯示彈出框的寬度

android:popupBackground="#66ccff"//顯示彈出框的背景顏色

android:entries="@array/week"//新增XML佈局

android:prompt //當顯示模式為dialog時生效,作用為顯示dialog的標題內容

android:prompt 屬性使用常見問題:

  • 設定之後不起作用:prompt屬性只有在dialog狀態才有用,所以要在xml中,將style設定為Widget.Spinner
  • prompt屬性要用string下資源,不支援字元直接輸入,否則會報錯誤

兩種寫法

  • XML檔案中設定資料來源
<Spinner
        android:id="@+id/spinner_arrays"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="50dp"
        android:dropDownWidth="230dp"
        android:entries="@array/week"
        android:popupBackground="#66ccff"
        android:spinnerMode="dropdown"></Spinner>
values/arrays.xml檔案

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="week">
        <item >星期一</item>
        <item >星期二</item>
        <item >星期三</item>
        <item >星期四</item>
        <item >星期五</item>
        <item >星期六</item>
        <item >星期天</item>
    </string-array>
</resources>
  • 程式碼中設定資料來源
  <Spinner
        android:id="@+id/spinner_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"></Spinner>
 codeSp = (Spinner) findViewById(R.id.spinner_code);
        final String[] arr={"深圳","上海","北京","山西"};
        //建立ArrayAdapter物件
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,arr);
        codeSp.setAdapter(adapter);
        /**選項選擇監聽*/
        codeSp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(SpinnerTestActivity.this, "點選了" + arr[position], Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

XML特點是方便快捷,缺點是不能動態改變要顯示的資料,使用介面卡特點是靈活多變,針對專案需求來選擇.