內容說明:建立下拉式選單(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) {}
 
 -         });
 
  複製代碼 |