天天看點

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 //顯示模式 :dropdown和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特點是友善快捷,缺點是不能動态改變要顯示的資料,使用擴充卡特點是靈活多變,針對項目需求來選擇.

demo下載下傳位址