2010年2月23日 星期二

Android學習筆記 - 下拉式選單(Spinner)

1. 透過Spinner物件建立下拉式選單

2. MainActivity.java
package org.me.android_spinner;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        Spinner spinner = (Spinner) findViewById(R.id.spinnner);
        //建立一個ArrayAdapter物件,並放置下拉選單的內容
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,new String[]{"紅茶","奶茶","綠茶"});
        //設定下拉選單的樣式
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        //設定項目被選取之後的動作
        spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
            public void onItemSelected(AdapterView adapterView, View view, int position, long id){
                Toast.makeText(MainActivity.this, "您選擇"+adapterView.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
            }
            public void onNothingSelected(AdapterView arg0) {
                Toast.makeText(MainActivity.this, "您沒有選擇任何項目", Toast.LENGTH_LONG).show();
            }
        });
    }
}


3. main.xml(Layout)
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </TextView>
    <Spinner
        android:id="@+id/spinnner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </Spinner>
</LinearLayout>


4. 下拉式選單畫面


6 則留言:

  1. 你好~
    請問SPINNER如果利用選項讀取其值並執行運算?
    謝謝

    回覆刪除
    回覆
    1. 如果是在OnItemSelectedListener裡面的話
      你可以先從adapterView抓到內部的值(上面範例有寫到) 轉換型態後再做運算
      如果是透過外面去抓的話
      可以用spinner的getSelectedItem()試試看
      spinner.getSelectedItem().toString()
      註:轉換型態可以用valueOf()這函式做轉換...
      看你程式要怎麼寫

      如果有誤解你的意思就真的很抱歉了

      刪除
  2. 如何設置兩個spinner 選項是互有關係的
    例如:spinnerA跟spinnerB

    spinnerA的選項是 飯 麵 如果選飯 spinnerB的選項會是 炒飯 燴飯
    如果選麵 spinnerB的選項是 王子麵 烏龍麵

    回覆刪除
    回覆
    1. 外面宣告string A[]={飯,麵} , B[]={炒飯,燴飯} ,C[]={王子麵烏龍麵};

      我是寫在onItemSelected裡面

      String t1[]={};
      if ( 選擇飯){ t1[]=B[炒飯,燴飯];}
      if (選擇麵){ t1[]=C{王子麵,烏龍麵};}

      ArrayAdapter tt = new ArrayAdapter(this, android.R.layout.simple_list_item_1, t1); //新增tt字串 裡面有t1[]
      sp2.setAdapter(tt);

      我正在做類似的飲料點餐系統
      這是我的寫法
      條件式裡面 當第一個spinner 選擇0~2的選項 第二個spinner 有冰 去冰 溫的選項
      當第一個spinner 選擇3的選項 第二個spinner 有冰 去冰 的選項

      我還卡在 選項選第幾個 要怎麼表示

      刪除
  3. Hi, 可以請教您,blogger 中貼程式碼,要加入哪些 script 設定,才能顯示像您這樣的顯示方式呢?謝謝

    回覆刪除
    回覆
    1. 可以參考我的文章
      http://shovachu-coding.blogspot.tw/2013/08/bloggersyntaxhighlighter.html

      刪除