星期五, 9月 16, 2011

Spinner

Android應用程式學習筆記

下拉式選單(Spinner)

在手機上的下拉式選單,有些不同,它會跳出一個對話框,裡面顯示有許多項目的列表。

創建一個spinner的步驟:
1.在main.xml文件中宣告spinner。
2.在strings.xml文件中宣告一個數據組。
3.創建一個ArrayAdapter物件。
4.取得Spinner物件,並設置數據。
5.創建一個監聽器。
6.綁定監聽器。

那現在就依步驟來實現Spinner
首先宣告一個Spinner


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/planet_prompt"
    />
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/planet_prompt"
    />
</LinearLayout>


android:prompt屬性是設定spinner的對話框中的標題。

藉著第二步,在strings.xml文件中宣告數據陣列。


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="planet_prompt">Choose a planet</string>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>


再來回到java文件中完成其他步驟


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //通過ID取得Spinner物件
    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    //通過createFromResource方法創建一個ArrayAdapter物件
    //第一個參數為context
    //第二個參數引用了strings.xml文件中定義的string數據組
    //第三個參數指定spinner顯示的樣式,是一個布局文件,由android系統提供的布局文件,也可用      由自己定義布局文件
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.planets_array, android.R.layout.simple_spinner_item);
    //設定spinner中各項目的樣式,由android提供的布局文件
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
}


設定監聽器


public class MyOnItemSelectedListener implements OnItemSelectedListener {

    //當使用者選擇了一個項目後,就會調用此方法
    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext(), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}


為spinner設置監聽器


spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());


按照以上的步驟完成,就可以實現spinner。
那還有另外一種實現spinner的方上,在以上的方式,我們將所有的數據都寫死在strings.xml文件中,然後ArrayAdapter物件到strings.xnl文件中讀取數據。除此之外我們還可以動態的創建ArrayAdapter物件。


    List<String> list = new ArrayList<String>();
    list.add("Mercury");
    list.add("Venus");
    //第一個參數為context
    //第二個參數指定了spinner的樣式,自己定義的布局文件(這裡定義了有一個TextView的布局文件)   //第三個參數指定textView的ID
   //第四個參數為整個spinner提供數據    ArrayAdapter adapter = new ArrayAdapter(this , R.layout.item , R.id.textViewId , list);


其他部分都差不多,在這裡我們自己定義了spinner列表項目的樣式,所以開發者可以依自己需求開發自己的spinner樣式。

沒有留言:

張貼留言