Spinner是一种类似于下拉式菜单widget,比较常使用.
根据开发文档Spinner使用指南,对Spinner的使用主要分以下几个步骤:
1、在布局文件中配置Spinner
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="10dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/planet_prompt"
/>
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/planet_prompt"
/>
</LinearLayout>
prompt为Spinner选择对话框的title,当然也可以在代码中设置,Spinner提供了相应的方法setPrompt(CharSequence prompt)和setPrompt(CharSequence prompt)
2、为Spinner提供待显示的数据列表,我们可以在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>
3、在代码中使用Spinner
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner); // 获取Spinner引用
//第一个参数为Context对象
//第二个参数为要显示的数据源,也就是在string.xml配置的数组列表
//第三个参数为设置Spinner的样式
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array,
android.R.layout.simple_spinner_item);
//设置Spinner中每一项的样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置Spinner数据来源适配器
spinner.setAdapter(adapter) ;
}
4、对用户选择进行监听
创建监听器
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext()), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
注册监听器
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
这样就完成了对Spinner控件的简单使用,另外我们还可以动态的生成Spinner要显示的数据,自定义Adapter
1、定义Adapter的布局文件spinneradapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="data"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/spinneritem"
android:layout_marginLeft="20dip"
/>
</LinearLayout>
2、创建Adapter对象
String[] datalist = new String[] { "one", "two", "three" };
//第二个参数为Spinner每一项的样式
//第三个参数为数据源,接收String[]
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this.getApplicationContext(), R.layout.spinneradapter,
R.id.spinneritem, datalist);
最终代码为
package bing.simplespinner;
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.Toast;
public class SimpleSpinner extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.spinner); // 获取Spinner引用
String[] datalist = new String[] { "one", "two", "three" };
//第二个参数为Spinner每一项的样式
//第三个参数为数据源,接收String[]
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this.getApplicationContext(), R.layout.spinneradapter,
R.id.spinneritem, datalist);
//第一个参数为Context对象
//第二个参数为要显示的数据源,也就是在string.xml配置的数组列表
//第三个参数为设置Spinner的样式
/*ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array,
android.R.layout.simple_spinner_item);*/
//设置Spinner中每一项的样式
//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置Spinner数据来源适配器
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
spinner.setAdapter(adapter) ;
}
}
class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
Toast.makeText(parent.getContext(),
"The planet is " + parent.getItemAtPosition(pos).toString(),//根据选中的位置可以获取该选项的数据
Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(parent.getContext(), "please select one item",
Toast.LENGTH_LONG).show();
}
}
运行结果