鍍金池/ 教程/ Android/ Android 實(shí)戰(zhàn)簡易教程-第一槍(Spinner 控件詳解)
Android 實(shí)戰(zhàn)簡易教程-第九槍(BitmapFactory.Options 對(duì)資源圖片進(jìn)行縮放)
Android 實(shí)戰(zhàn)簡易教程-第三槍(實(shí)現(xiàn)簡單繪圖組件)
Android 用的最多的,也最難用的應(yīng)該就是 ListView 了,下面我們研究一下它的用法。
Android 實(shí)戰(zhàn)簡易教程-第四槍(ScrollView 和 HorizontalScrollView 動(dòng)態(tài)添加控件并提供事件
Android 實(shí)戰(zhàn)簡易教程-第一槍(Spinner 控件詳解)
Android 實(shí)戰(zhàn)簡易教程-第六槍(各種對(duì)話框 Dialog 用法研究大全)
Android 實(shí)戰(zhàn)簡易教程-第七槍(Activity 的啟動(dòng)模式)
Android 實(shí)戰(zhàn)簡易教程-第二槍(Spinner 下拉級(jí)聯(lián)效果)
Android 實(shí)戰(zhàn)簡易教程-第八槍(ImageSwitcher 用法實(shí)例)
Android 實(shí)戰(zhàn)簡易教程-第十槍(畫廊組件 Gallery 實(shí)用研究)
作者簡介

Android 實(shí)戰(zhàn)簡易教程-第一槍(Spinner 控件詳解)

本教程簡單實(shí)用,大家喜歡的話可以關(guān)注我,謝謝!

下拉列表框是一種常見的圖形組件,與其他選擇組件相比,可以有效的節(jié)省屏幕空間,在 Android 中可以使用 android.widget.Spinner 類來實(shí)現(xiàn)。

下拉列表框中的列表項(xiàng)有以下兩種配置方式。

方式一、通過資源文件配置,例如定義一個(gè) values/city_data.xml 的文件,在定義數(shù)據(jù)內(nèi)容時(shí)需要使用<string-array>元素指定,定義內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="city_labels">
        <item>北京 </item>
        <item>上海 </item>
        <item>廣州 </item>
        <item>深圳 </item>
    </string-array>
</resources>

方式二、通過 android.widget.ArrayAdapter 類讀取資源文件或者指定具體設(shè)置的數(shù)據(jù)。

方式一

1.定義 main.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="請(qǐng)選擇您喜歡的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" ><!-- 載入數(shù)據(jù) -->
    </Spinner>

</LinearLayout>

其實(shí)這是你就可以運(yùn)行模擬器了:

http://wiki.jikexueyuan.com/project/android-in-action/images/2.png" alt="" />

這是可以看到數(shù)據(jù)已經(jīng)加入到 Spinner 里面去了,我們發(fā)現(xiàn)這時(shí)的控件只是徒有其表,沒有什么作用,要想實(shí)現(xiàn)監(jiān)聽怎么做呢?

我們改動(dòng)一下 main.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="請(qǐng)選擇您喜歡的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" > <!-- 載入數(shù)據(jù) -->
    </Spinner>

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

然后編輯 MainActivity 文件:

package org.yayun.demo;

import org.yayun.demo.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;

public class MainActivity extends Activity {
    private Spinner spinner;
    private TextView textView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // 生命周期方法
        super.setContentView(R.layout.main); // 設(shè)置要使用的布局管理器
        spinner = (Spinner) findViewById(R.id.spinner);
        textView = (TextView) findViewById(R.id.text);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                String[] cities = getResources().getStringArray(
                        R.array.city_labels);//獲取列表數(shù)據(jù)
                textView.setText("您喜歡的城市是:" + cities[position]);//顯示

            }

            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });

    }
}

運(yùn)行如下:

http://wiki.jikexueyuan.com/project/android-in-action/images/3.png" alt="" />

方式二

修改 main.xml 代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="請(qǐng)選擇您喜歡的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" > <!-- 載入數(shù)據(jù) -->
    </Spinner>

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Spinner
        android:id="@+id/spinnerCountry"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" > <!-- 動(dòng)態(tài)載入數(shù)據(jù) -->
    </Spinner>

</LinearLayout>

修改 MainActivity 程序:

package org.yayun.demo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Spinner spinner, spinnerCountry;
    private TextView textView;
    private List<CharSequence> data = null;
    private ArrayAdapter<CharSequence> adapter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // 生命周期方法
        super.setContentView(R.layout.main); // 設(shè)置要使用的布局管理器
        spinner = (Spinner) findViewById(R.id.spinner);
        textView = (TextView) findViewById(R.id.text);
        spinnerCountry = (Spinner) findViewById(R.id.spinnerCountry);

        spinnerCountry.setPrompt("選擇國籍:");// 在列表中顯示
        data = new ArrayList<CharSequence>();
        data.add("中國");
        data.add("美國");
        data.add("日本");
        adapter = new ArrayAdapter<CharSequence>(this,
                android.R.layout.simple_spinner_dropdown_item, this.data);//定義下拉列表
        spinnerCountry.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                String[] cities = getResources().getStringArray(
                        R.array.city_labels);// 獲取列表數(shù)據(jù)
                textView.setText("您喜歡的城市是:" + cities[position]);// 顯示

            }

            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });
        spinnerCountry.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                String[] countries = data.toArray(new String[data.size()]);// 獲取列表數(shù)據(jù)
                Toast.makeText(MainActivity.this, "您的國籍是:"+countries[position], Toast.LENGTH_SHORT).show();

            }

            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });

    }
}

運(yùn)行實(shí)例如下:

http://wiki.jikexueyuan.com/project/android-in-action/images/1.png" alt="" />

總結(jié):

  1. 定義數(shù)據(jù)內(nèi)容時(shí)需要使用 <string-array> 元素指定;
  2. android:entries="@array/city_labels"載入文本資源;
  3. String[] cities = getResources().getStringArray(R.array.city_labels);//獲取資源數(shù)據(jù)的方法
  4. String 和 CharSequence 關(guān)系 String 繼承于 CharSequence,也就是說 String 也是 CharSequence 類型。 CharSequence 是一個(gè)接口,它只包括 length(), charAt(int index), subSequence(int start, int end) 這幾個(gè) API 接口。除了 String 實(shí)現(xiàn)了 CharSequence 之外,StringBuffer 和 StringBuilder 也實(shí)現(xiàn)了 CharSequence 接口。 需要說明的是,CharSequence 就是字符序列,String, StringBuilder 和 StringBuffer 本質(zhì)上都是通過字符數(shù)組實(shí)現(xiàn)的!
  5. 提示信息的設(shè)置:spinnerCountry.setPrompt("選擇國籍:");// 在列表中顯示
  6. 此外可以用 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//來設(shè)置顯示風(fēng)格