1、什么是Spinner?
如题所示,spinner的实质就是下拉列表,比如我们在网上填写居住地资料时,通常就会弹出一个下拉列表供我们选择,而不是让我们自由填写。效果图如下:
2、Spinner的实现
(1)首先,在activity_main.xml布局文件中添加spinner控件,设置其有关属性,代码很简单,如下:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
(2)现在已经有了Spinner的框架了,同之前的GridVIew和ListView一样,我们需要将具体数据添加到控件中,说到添加数据,于是Adapter又出现啦~~。来到MainActivity:
首先需要初始化Spinner:
private Spinner spinner;
spinner=(Spinner) findViewById(R.id.spinner);
然后就开始绑定数据了:
// 添加一个下拉列表项的list存放数据
private List<String>list = new ArrayList<String>();
//定义适配器
private ArrayAdapter<String> adapter;
//设置数据源
list.add("北京");
list.add("上海");
list.add("天津");
list.add("重庆");
//为下拉列表定义一个数组适配器
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
//为适配器设置下拉列表下拉时的菜单样式(这里使用默认样式)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将适配器添加到下拉列表上
spinner.setAdapter(adapter);
这时运行程序就可以看到spinner已经设置好了,打开程序时默认选中的是list中的第一条数据,也就是“北京”。
3、为Spinner添加事件监听器
有布局就必须要有监听事件,否则这个布局就只是个摆设了,为了体现它的监听事件,我们在布局中添加一个TextView:
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp" //设置字体大小
android:textColor="#ff0000" //设置字体颜色
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
然后在MainActivity中对它进行初始化等:
private TextView textview;
textview=(TextView) findViewById(R.id.textview);
textview.setText("您选择的城市是:");
然后添加Spinner的事件监听器:OnItemSelectedListener,它默认的方法如下:
//为下拉列表设置各种事件的响应,这个事件响应菜单被选中
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
// TODO Auto-generated method stub
String cityName = adapter.getItem(position);
textview.setText("您选择的城市是:"+cityName);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
这样,当你选中某一项时,文字就会发生相应的改变,显示你所选择的信息,如上图所示的那样。
4、下面给出所有完整代码
(1)activity_main.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="#ff0000"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textview"
android:layout_alignLeft="@+id/textview"/>
</RelativeLayout>
(2)MainActivity:
package com.example.spinnerdemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
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;
public class MainActivity extends Activity {
private Spinner spinner;
private TextView textview;
// 1、添加一个下拉列表项的list
private List<String>list = new ArrayList<String>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(TextView) findViewById(R.id.textview);
spinner=(Spinner) findViewById(R.id.spinner);
textview.setText("您选择的城市是:");
//设置数据源
list.add("北京");
list.add("上海");
list.add("天津");
list.add("重庆");
//2、为下拉列表定义一个数组适配器
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
//3、为适配器设置下拉列表下拉时的菜单样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//4、将适配器添加到下拉列表上
spinner.setAdapter(adapter);
//5、为下拉列表设置各种事件的响应,这个事件响应菜单被选中
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String cityName = adapter.getItem(position);
textview.setText("您选择的城市是:"+cityName);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
}