更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》
下面简单介绍怎么创建和使用一个Spinner控件。
首先,在layout布局文件文件中定义一个Spinner控件。
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/spinner_1_color_prompt" />
注:
1、android:drawSelectorOnTop="true"
有关该属性的相关知识请参考:http://blog.csdn.net/jincf2011/article/details/6598689
2、android:prompt="@string/spinner_1_color_prompt"
表示下拉列表控件Spinner上的标题文字。如下所示:“Choose a color”就是该属性定义的标题文字。
接着,定义Spinner控件的数据源数组。在value目录下创建一个arrays.xml文件。在里面定义一个数组,用作Spinner控件的数据源。格式如下:
<!-- Used in View/Spinner1.java -->
<string-array name="colors">
<item>red</item>
<item>orange</item>
<item>yellow</item>
<item>green</item>
<item>blue</item>
<item>violet</item>
</string-array>
最后,在Spinner1.java文件中实例化Spinner控件。
// 通过findViewById方法获得一个Spinner对象s1,下同
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
//根据颜色数组R.array.colors创建一个数组适配器
//第二个参数 R.array.colors 为数组适配器数据源
//第三个参数 是下拉列表中每个数据所占据的 View 的样式 。这里采用系统默认样式 android.R.layout.simple_spinner_item
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
//设置适配器下拉样式,这里是系统默认样式 android.R.layout.simple_spinner_dropdown_item
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将 Spinner 控件绑定适配器 adapter
s1.setAdapter(adapter);
这样,一个Spinner控件就成功创建好了。那么这个控件怎么用呢?和按钮等大多数控件一样,Spinner控件也是通过创建一个监听器来监听用户的动作的。当用户选择其中一个选项时,便会触发响应。
//设置监听器。当用户选择其中一个选项时,触发响应。
s1.setOnItemSelectedListener(
//选择其中一个选项时,触发该响应
//parent:装载数据的视图列表
//view:列表中当前选中的item视图
//position:选中的item在AdapterView中的索引
//id:选中的item视图控件的id值
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
showToast("Spinner1: position=" + position + " id=" + id);
}
//什么选项都没选择时,触发该响应
public void onNothingSelected(AdapterView<?> parent) {
showToast("Spinner1: unselected");
}
});
下面我们进行实例代码解析:
res-values-arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Used in View/Spinner1.java -->
<string-array name="colors">
<item>red</item>
<item>orange</item>
<item>yellow</item>
<item>green</item>
<item>blue</item>
<item>violet</item>
</string-array>
<!-- Used in View/Spinner1.java -->
<string-array name="planets">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
<item>Pluto</item>
</string-array>
</resources>
res-layout-spinner_1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/spinner_1_color" />
<!-- 一个Spinner对象 -->
<!-- android:drawSelectorOnTop 具体参考:http://blog.csdn.net/jincf2011/article/details/6598689 -->
<!-- android:prompt 下拉列表控件Spinner的标题文字 -->
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/spinner_1_color_prompt" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/spinner_1_planet" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/spinner_1_planet_prompt" />
</LinearLayout>
src-com.example.android.apis.view-Spinner1.java
package com.example.android.apis.view;
/**
* 演示如何使用下拉列表控件Spinner
*/
import com.example.android.apis.R;
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;
import android.widget.AdapterView.OnItemSelectedListener;
public class Spinner1 extends Activity {
// 调用Toast控件来显示消息msg,用来提示用户
void showToast(CharSequence msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner_1);
// 通过findViewById方法获得一个Spinner对象s1,下同
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
//根据颜色数组R.array.colors创建一个数组适配器
//第二个参数 R.array.colors 为数组适配器数据源
//第三个参数 是下拉列表中每个数据所占据的 View 的样式 。这里采用系统默认样式 android.R.layout.simple_spinner_item
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
//设置适配器下拉样式,这里是系统默认样式 android.R.layout.simple_spinner_dropdown_item
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将 Spinner 控件绑定适配器 adapter
s1.setAdapter(adapter);
//设置监听器。当用户选择其中一个选项时,触发响应。
s1.setOnItemSelectedListener(
//选择其中一个选项时,触发该响应
//parent:装载数据的视图列表
//view:列表中当前选中的item视图
//position:选中的item在AdapterView中的索引
//id:选中的item视图控件的id值
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
showToast("Spinner1: position=" + position + " id=" + id);
}
//什么选项都没选择时,触发该响应
public void onNothingSelected(AdapterView<?> parent) {
showToast("Spinner1: unselected");
}
});
// 通过findViewById方法获得一个Spinner对象s2
Spinner s2 = (Spinner) findViewById(R.id.spinner2);
adapter = ArrayAdapter.createFromResource(this, R.array.planets,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter);
s2.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
showToast("Spinner2: position=" + position + " id=" + id);
}
public void onNothingSelected(AdapterView<?> parent) {
showToast("Spinner2: unselected");
}
});
}
}
预览效果;