本教程簡單實(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="" />
<string-array>
元素指定;android:entries="@array/city_labels"
載入文本資源;String[] cities = getResources().getStringArray(R.array.city_labels);
//獲取資源數(shù)據(jù)的方法spinnerCountry.setPrompt("選擇國籍:");
// 在列表中顯示