顯示具有 Android物件應用 標籤的文章。 顯示所有文章
顯示具有 Android物件應用 標籤的文章。 顯示所有文章

2011年5月25日 星期三

SeekBar物件

SeekBar物件
    public void onCreate(Bundle savedInstanceState) {
        .........
        skb_seekbar = (SeekBar)findViewById(R.id.seekbar);
        skb_seekbar.setOnSeekBarChangeListener(change);
    }

    private OnSeekBarChangeListener change = new OnSeekBarChangeListener() {
        public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
        txv_percentage.setText(String.valueOf(arg1));
        set_brightness(arg1);
    }
    public void onStartTrackingTouch(SeekBar seekBar) {}
    public void onStopTrackingTouch(SeekBar seekBar) {}

2011年5月24日 星期二

Rating Bar物件

Rating Bar物件    <RatingBar
        android:id="@+id/ratingbar"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:numStars="5"
       
android:stepSize="1.0"/>


    RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar);
    ratingbar
.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
       
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
           
Toast.makeText(HelloFormStuff.this, "New Rating: " + rating, Toast.LENGTH_SHORT).show();
       
}
    });

Toggle Button物件

Toggle Button物件通常用於開/關選項設定
    <ToggleButton android:id="@+id/togglebutton"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:textOn="Vibrate on"
       
android:textOff="Vibrate off"/>


    ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
    togglebutton
.setOnClickListener(new OnClickListener() {
       
public void onClick(View v) {
           
// Perform action on clicks
           
if (togglebutton.isChecked()) {
               
Toast.makeText(HelloFormStuff.this, "Checked", Toast.LENGTH_SHORT).show();
           
} else {
               
Toast.makeText(HelloFormStuff.this, "Not checked", Toast.LENGTH_SHORT).show();
           
}
       
}
    });

Radio Button物件

Radio Button物件通常用於"單選"項目
mian.xml
    <RadioGroup
       
android:layout_width="fill_parent"
       
android:layout_height="wrap_content"
       
android:orientation="vertical">
       
<RadioButton

            android:id="@+id/radio_red"
           
android:layout_width="wrap_content"
            
android:layout_height="wrap_content"
           
android:text="Red" />
       
<RadioButton

            android:id="@+id/radio_blue"
           
android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:text="Blue" />
   
</RadioGroup>


Xxx.java
    public void onCreate(Bundle savedInstanceState) {
        .......
        RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red);
        
RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue);
        radio_red
.setOnClickListener(radio_listener);
        radio_blue
.setOnClickListener(radio_listener);

    }

    private OnClickListener radio_listener = new OnClickListener() {
       
public void onClick(View v) {
           
// Perform action on clicks
           
RadioButton rb = (RadioButton) v;
            // 顯示選擇項目

            Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
       
}
    };

-------------------------------------------------------------------------------------
    private RadioGroup.OnCheckedChangeListener change =
        new RadioGroup.OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if (checkedId == mRadio1.getId()) {
                Toast.makeText(radio.this, "1", Toast.LENGTH_SHORT).show();
            }
            if (checkedId == mRadio2.getId()) {
                Toast.makeText(radio.this, "2", Toast.LENGTH_SHORT).show();
            }
        }
    };

CheckBox物件

CheckBox物件
通常用於設定開/關選項
    checkbox.setOnClickListener(new OnClickListener() {
       
public void onClick(View v) {
           
// Perform action on clicks, depending on whether it's now checked
           
if (((CheckBox) v).isChecked()) {
               
Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
           
} else {
               
Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
           
}
       
}
    });

2011年5月23日 星期一

Gallery物件

Gallery物件畫廊,大部分用於顯示圖片
Gallery.java
    Gallery g = (Gallery) findViewById(R.id.gallery);
    g.setAdapter(new ImageAdapter(this));
    g.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View v, int position, long id) {
            // function
        }
    }

    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;
        private Integer[] mImageIds = {
            R.drawable.sample01,        R.drawable.sample02,        R.drawable.sample03,
            R.drawable.sample04,        R.drawable.sample05,        R.drawable.sample06,
            R.drawable.sample07,        R.drawable.sample08,        R.drawable.sample09     };
   
        // 建構子,當new新物件時會進到這裡做初始化的動作
        public ImageAdapter(Context c) {
            mContext = c;
            TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
            mGalleryItemBackground = a.getResourceId(
                R.styleable.HelloGallery_android_galleryItemBackground, 0);
            a.recycle();
        }
   
        public int getCount() {    return mImageIds.length;    }
        public Object getItem(int position) {    return position;    }
        public long getItemId(int position) {    return position;    }
   
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(mContext);
            i.setImageResource(mImageIds[position]);
            i.setLayoutParams(new Gallery.LayoutParams(320, 480));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);
            return i;
        }
    }

main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <Gallery xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
values的資料夾下新增HelloGallery的style
attrs.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="HelloGallery">
            <attr name="android:galleryItemBackground" />
        </declare-styleable>
    </resources>

2011年4月18日 星期一

ProgressBar物件

ProgressBar物件
進度條,寫在Handler 裡更新狀態,參考如下
    public class progressbar extends Activity {
        ProgressBar myProgressBar; 
        int myProgress = 0;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
       
            myProgressBar = (ProgressBar)findViewById(R.id.progressbar);
            myProgressBar.setProgress(myProgress);
            // 開啟另一個執行緒,每0.1秒鐘送出一個訊息
            new Thread( new Runnable()
                public void run() {
                    while(myProgress<100){ 
                        try{
                            myHandle.sendMessage(myHandle.obtainMessage());
                            Thread.sleep(100);
                        }
                        catch(Throwable t){
                        }
                    }
                }
            }).start();
        } 
        // 每進來一次,增加一百分比
        Handler myHandle = new Handler(){ 
            public void handleMessage(Message msg) { 
                myProgress++; 
                myProgressBar.setProgress(myProgress); 
            }
        };
}

2011年4月15日 星期五

MediaPlayer物件

MediaPlayer物件
Audio Play
    使用MediaPlayer物件撥放聲音,可以從不同的來源設定,其使用的方式也不相同。
    1. 本地端(包含在APK裡的檔案)
        private MediaPlayer mediaPlayer = null;

        // Start Play Audio
        private OnClickListener start = new OnClickListener() {
            public void onClick(View v) {
                // 直接從本地端讀取音源檔
                mediaPlayer = MediaPlayer.create(AudioPlay.this, R.raw.test);
                try {
                    mediaPlayer.start();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
                btn_start.setEnabled(false);
                btn_stop.setEnabled(true);
            }
        };

        // Stop Play Audio
        private OnClickListener stop = new OnClickListener() {
            public void onClick(View v) {
                mediaPlayer.stop();
                // 結束時把控制全釋放,避免占用資源
                mediaPlayer.release();
                mediaPlayer = null;
                btn_start.setEnabled(true);
                btn_stop.setEnabled(false);
            }
        };

        // 銷毀,當不正常結束的情形發生時的處理動作
        public void onDestroy() {
            super.onDestroy();
            // 避免物件為"空"時,使用屬性發生錯誤
            if (mediaPlayer != null) {
                mediaPlayer.stop();
                mediaPlayer.release();
                mediaPlayer = null;
            }
        }

    2. 外部裝置或路徑
        // Use sd card resource
        bplay.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                try {
                    mp.setDataSource("/sdcard/Christina - Fighter.mp3");
                    mp.prepare();
                    mp.start();
                    bmsg.setText("Playing...");
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

Video Play
撥放影音需用到SurfaceView物件
    main.xml    <SurfaceView
        android:id="@+id/surface"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_gravity="center"/>

    Xxx.java
    private MediaPlayer mMediaPlayer;
    private SurfaceView mPreview;
    private SurfaceHolder holder;

    // 初始化,並設定holder
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mPreview = (SurfaceView) findViewById(R.id.surface);
        holder = mPreview.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    }

    // 初始化及設定MediaPlayer物件
    private void playVideo() {
        doCleanUp();
        try {
            path = "/sdcard/test.mp4";
            // Create a new media player and set the listeners
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.setDisplay(holder);
            mMediaPlayer.prepare();
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        }
        catch (Exception e) {
        }
    }

    // Called to update status in buffering a media stream(非必要)
    public void onBufferingUpdate(MediaPlayer arg0, int percent) { }

    // 當影片播放結束,進入onCompletion狀態(非必要)
    // 若是要重複播放,可以參考下列流程控制
    // 或是在playVideo加入"mMediaPlayer.setLooping(true)"
    public void onCompletion(MediaPlayer arg0) {
        mMediaPlayer.stop();
        try {
            mMediaPlayer.prepare();
        }
        catch (IllegalStateException e) { }
        catch (IOException e) { }
        mMediaPlayer.start();
    }

    // 讀取影片畫面大小
    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
        if (width == 0 || height == 0) {
            return;
        }
        mIsVideoSizeKnown = true;
        mVideoWidth = width;
        mVideoHeight = height;
        if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
            startVideoPlayback();
        }
    }

    // 準備狀態
    public void onPrepared(MediaPlayer mediaplayer) {
        mIsVideoReadyToBePlayed = true;
        if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
            startVideoPlayback();
        }
    }

    // for "SurfaceHolder.Callback" use
    public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { }
    public void surfaceDestroyed(SurfaceHolder surfaceholder) { }
    public void surfaceCreated(SurfaceHolder holder) {
        playVideo();
    }

    protected void onDestroy() {
        super.onDestroy();
        releaseMediaPlayer();
        doCleanUp();
    }

    private void releaseMediaPlayer() {
        if (mMediaPlayer != null) {
            mMediaPlayer.release();
            mMediaPlayer = null;
        }
    }

    private void doCleanUp() {
        mVideoWidth = 0;
        mVideoHeight = 0;
        mIsVideoReadyToBePlayed = false;
        mIsVideoSizeKnown = false;
    }

    // strat to play
    private void startVideoPlayback() {
        holder.setFixedSize(mVideoWidth, mVideoHeight);
        mMediaPlayer.start();
    }

AudioManager物件

AudioManager物件
下面介紹一些音量管理器的功能

取得音量控制器
    AudioManager audioManager =
        (AudioManager)getSystemService(Context.AUDIO_SERVICE);

目前音量
    current_volume.setText(
        String.valueOf(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)));

正常模式
    mode1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        }
    });

震動模式
    mode2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        }
    });

靜音模式
    mode3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        }
    });

增大音量
    volume_add.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            audioManager.setStreamVolume(
                AudioManager.STREAM_MUSIC,
                audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)+1,0);
        }
    });

減少音量
    volume_dec.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            audioManager.setStreamVolume(
                AudioManager.STREAM_MUSIC,
                audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)-1,0);
        }
    });

2011年4月12日 星期二

EditText物件

EditText物件
編輯文字,用於資料輸入時使用
    edittext.setOnKeyListener(new OnKeyListener() {
       
public boolean onKey(View v, int keyCode, KeyEvent event) {
           
// 當按下"Enter Key"時
           
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
               
(keyCode == KeyEvent.KEYCODE_ENTER)) {
                Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
               
return true;
           
}
           
return false;
       
}
    });

    // 在虛擬鍵盤按下"ENTER"後,隱藏虛擬鍵盤
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
            InputMethodManager in =
                (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            in.hideSoftInputFromWindow(
                v.getApplicationWindowToken(),
                InputMethodManager.HIDE_NOT_ALWAYS);
        }
        return true;
    }

2011年4月11日 星期一

ListView物件

ListView物件
表單,用於顯示複數以上的物件。
常見的應用例如"檔案管理","系統功能選項"。

一般的做法
    // layout裡為一個TextView
    adapter = new ArrayAdapter<String>(this, R.layout.device_name);
   
    ListView lv= (ListView) findViewById(R.id.list);
    // 此行程式碼會將list的資料更新
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(select);
   
    // 在ListView裡加入項目
    adapter.add("item1");
    adapter.add("item2");
    adapter.add("item3");
    ........

    private OnItemClickListener select= new OnItemClickListener() {
        public void onItemClick(AdapterView<?> av, View v, int pos, long arg3) {
       
        }
    };

另一種方法,用SimpleAdapter
    public void onCreate(Bundle savedInstanceState) {
        ..........
        listview = (ListView)findViewById(R.id.list);
        listview.setOnItemClickListener(listen_click);
        update_list();
        ...........
    }
   
    private void update_list() {
        SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.listitem,
            new String[]{"info","img"}, new int[]{R.id.info,R.id.img}); 
            listview.setAdapter(adapter);
    }

    private List<Map<String, Object>> getData() {
        int i;
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map;
       
        map = new HashMap<String, Object>();
        map.put("info", "name"); 
        map.put("img", R.drawable.back);
        list.add(map);
       
        return list;
    }
   
    private OnItemClickListener listen_click = new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
       
        }
   };

Menu物件

Menu物件
選單,通常用於修改AP設定使用的物件
簡易的做法
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, ITEM1, 0, "item1");
        menu.add(0, ITEM2, 0, "item2");
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId()){
            case ITEM1:
                break;
            case ITEM2:
                break;
        }
        return true;
    }

使用resource
在res下新增menu的資料夾,加入xml檔
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
       
<item android:id="@+id/new_game"
                
android:icon="@drawable/ic_new_game"
                
android:title="@string/new_game" />
       
<item android:id="@+id/help"
                 
android:icon="@drawable/ic_help"
                
android:title="@string/help" />
    </menu>

然後在.java加入
    public boolean onCreateOptionsMenu(Menu menu) {
       
MenuInflater inflater = getMenuInflater();
        inflater
.inflate(R.menu.game_menu, menu);
       
return true;
    }


    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
       
case R.id.new_game:
            //newGame
();
           
break;
       
case R.id.help:
            //showHelp
();
           
break;
       
default:
           
return super.onOptionsItemSelected(item);

            break;
       
}

        return true;
    }


其他作法可參照官方網站
Dev Guide - Framework Topics - User Interface - Creating Menus

Toast & Log物件

Toast & Log物件
Toast主要用於顯示通知訊息
Log主要是提供給debug的編寫者使用

    Toast用法
    Toast.makeText(Sample.this, "serivce destroy", Toast.LENGTH_LONG).show();
    (LENGTH_LONG - 顯示時間長短)

    Log用法
    Log.d("TAG", "message");
   
    Log.v (VERBOSE) 詳細訊息
    Log.d (DEBUG) 除錯訊息
    Log.i (INFO) 通知訊息
    Log.w (WARN) 警告訊息
    Log.e (ERROR) 錯誤訊息

2011年4月8日 星期五

Timer物件

Timer物件
可以用來排定"排程",在設定的週期裡重複執行
使用到HandlerMessage物件

    // 新增Timer Task
    public void OnCreate (Bundle bundle) {
        ..........
        timer = new Timer();
        // 這裡的時間以毫秒(ms)為單位
        timer.schedule(new mytask(), 1, 1000);
        start_time = System.currentTimeMillis();
    }

    public void OnDestory () {
        super.onDestory();
        timer.cancel();
    }

    private class mytask extends TimerTask {
        public void run() {
            Message message = new Message();
            message.what = 1;
            mHandler.sendMessage(message);
        }
    }

    private Handler mHandler = new Handler(){
        public void handleMessage(Message msg) {
            if (msg.what == 1) {
                Toast.makeText(
                    BattService.this,
                    String.valueOf((System.currentTimeMillis()-start_time)/1000) + "s",
                    Toast.LENGTH_LONG).show();
                record_log();
            }
        };
    };

2011年4月7日 星期四

Dialog物件

Dialog物件
Dialog物件分成4種:
    AlertDialog, ProgressDialog, DatePickerDialog, TimePickerDialog
這裡只介紹最基本的AlertDialog
其他使用方式可在官網的Dev Gudie - Framework Topics - User Interface - Creating Dialogs查詢

Adding buttons
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder

        .setMessage("Are you sure you want to exit?")
        
.setCancelable(false)
        // 有setPositiveButton, setNegativeButton, setNeutralButton
        
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           
public void onClick(DialogInterface dialog, int id) {
               
MyActivity.this.finish();
            
}
       
})
       
.setNegativeButton("No", new DialogInterface.OnClickListener() {
           
public void onClick(DialogInterface dialog, int id) {
                dialog
.cancel();
           
}
       
});
    AlertDialog alert = builder.create();

Adding a list
    final CharSequence[] items = {"Red", "Green", "Blue"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder
.setTitle("Pick a color");
    builder
.setItems(items, new DialogInterface.OnClickListener() {
       
public void onClick(DialogInterface dialog, int item) {
           
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
       
}
    });
    AlertDialog alert = builder.create();


Adding checkboxes and radio buttons
    final CharSequence[] items = {"Red", "Green", "Blue"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder
.setTitle("Pick a color");
    builder
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
       
public void onClick(DialogInterface dialog, int item) {
           
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
       
}
    });
    AlertDialog alert = builder.create();

2011年4月6日 星期三

Button物件

Button物件
大部分用於觸發某項功能時使用
通常會使用到OnClickListener這個事件

OnClickListener為例,下列三種寫法都可以達成同樣的功能
1. 一般標準的寫法
    // Button的宣告
    btn_start = (Button)findViewById(R.id.start);
    btn_start.setOnClickListener(start);

    private OnClickListener start = new OnClickListener() {
        public void onClick(View v) {
            // function
        }
    };

2. 簡化的寫法
    btn_start = (Button)findViewById(R.id.start);
    btn_start.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // function
        }
    });

3. 使用implements的寫法
    先在Activity implements OnClickListener
    public class sample extends Activity implements OnClickListener {
        .......
        public void OnCreate (Bundle bundle) {
            // import button id
            btn1 = (Button)findViewById(R.id.button1);
            btn2 = (Button)findViewById(R.id.button2);
            btn3 = (Button)findViewById(R.id.button3);
           
            btn1.setOnClickListener(this);
            btn2.setOnClickListener(this);
            btn3.setOnClickListener(this);
        }

        public void onClick (View v) {
            if (v == btn1) {
                .........
            }
            else if (v == btn2) {
                .........
            }
            else if (v == btn3) {
                .........
            }   
        }

Spinner物件

Spinner物件
下拉式選單,需要應用到ArrayAdapter物件

程式碼
    private Spinner spinner;
    private String[] format = new String[] {
        "Item1",  "Item2",
    };

    ArrayAdapter<String> adapter =
        new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, format);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   
    spinner = (Spinner) findViewById(R.id.spinner);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(select);

    private OnItemSelectedListener select = new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3) {
            // pos代表所選項目的位置,從0開始累加
        }
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    }

另外Spinner的items也可以在main.xml裡宣告
main.xml
    <Spinner
       
android:id="@+id/spinner"
       
android:layout_width="fill_parent"
       
android:layout_height="wrap_content"
       
android:prompt="@string/planet_prompt"
   
/>

String.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>


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

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        
this, R.array.planets_array, android.R.layout.simple_spinner_item);
    adapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   

    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    
spinner.setAdapter(adapter);
    ........
}