內容說明:建立下拉式選單(Spinner)、Adapter的使用、在XML裡建立陣列常數
資料來源: Google!Android 2手機應用程式設計入門第三版
在「 表單元件設計」有說明了按鈕等基本表單物件的建立方式,這篇要介紹的則是下拉式選單。建立下拉式選單,請先在 res/layout/main.xml 裡拉出一個 Spinner 物件。在這裡需要注意的是 Prompt 屬性,在下拉式選單彈出的時候,會以 Prompt 作為提示語,下面的圖例會顯示。Prompt屬性值不可以直接輸入文字,必需要先在value/strings.xml裡建立好,或是在程式裡使用setPrompt()設定。Spinner物件的XML範例如下: - <spinner android:id="@+id/Spinner01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:prompt="@string/spinner_prompt">
- </spinner>
複製代碼想要替下拉式選單加入選項內容,必需要先用陣列產生選項,再傳給Spinner。但是在Android程式裡,陣列是不能夠直接傳值給介面元件的,必需要透過Adapter將陣列值傳給Spinner。這個模式和 ListActivity 的建立方式是類似的,不過在不同的情況下,要選用不同的Adapter。 在程式中宣告陣列並餵給Adapter方法在「 ListActivity」有介紹過了,所以這裡就在XML檔裡建立陣列常數。請先開啟res/value/strings.xml檔,並建立字串陣列如下: - <string-array name="items">
- <item>item 1</item>
- <item>item 2</item>
- <item>item 3</item>
- <item>item 4</item>
- <item>item 5</item>
- </string-array>
複製代碼接著回到主程式中,在onCreate將陣列載入Spinner裡: - Spinner spinner_items = (Spinner) findViewById(R.id.Spinner01);
- //從res/values/string.xml讀取資料到Spinner
- ArrayAdapter< charsequence> adapter = ArrayAdapter.createFromResource(this,
- R.array.items,
- android.R.layout.simple_spinner_item);
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinner_items.setAdapter(adapter);
複製代碼請和 ListActivity的載入方式做比較。因為是從XML檔載入,所以型別是<CharSequence>(請自行刪除程式中的空白),而且不需要new ArrayAdapter,而是直接呼叫createFromResource()。注意這裡的順序是this, array, layout。simple_spinner_item 和 simple_spinner_dropdown_item 都是系統內建的預設樣式。最後把adapter丟給spinner變數就可以完成選取的動作。 要取得選取值可以使用「getSelectedItem()」或「getSelectedItemPosition()」;設定預設值則使用「setSelection()」。 如果要在使用者選取項目時產生事件,則要先建立Listener(參考 表單元件設計)。根據系統產生的Listener方法修改如下: - spinner_items.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
-
- @Override
- public void onItemSelected(AdapterView parent, View v, int position, long id) {
- // parent = 事件發生的母體 spinner_items
- // position = 被選擇的項目index = parent.getSelectedItemPosition()
- // id = row id,通常給資料庫使用
-
- }
-
- @Override
- public void onNothingSelected(AdapterView parent) {}
- });
複製代碼 |