Spinner类层次结构:
java.lang.Object | |||||
↳ | android.view.View | ||||
↳ | android.view.ViewGroup | ||||
↳ | android.widget.AdapterView<T extends android.widget.Adapter> | ||||
↳ | android.widget.AbsSpinner | ||||
↳ | android.widget.Spinner |
如何使用Spinner:
1、在布局xml文件中声明Spinner
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- <mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/mytextview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dip"
- android:text="@string/planet_prompt"
- />
- <Spinner
- android:id="@+id/myspinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:drawSelectorOnTop="false"
- android:prompt="@string/write"
- />
- </LinearLayout>
android:prompt属性指定了spinner弹出选择框时的标题
2、为Spinner指定数据
有两种方式为spinner指定数据:在代码中指定和加载资源文件中数据
先看在代码中指定的方式:
- public class SpinnerActivity extends Activity {
- private Spinner spinner = null;
- private TextView myTextView = null;
- private static final String[] datas = {"China","Japan","USA"};
- private ArrayAdapter<String> arrayAdapter = null;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- spinner = (Spinner)findViewById(R.id.myspinner);
- myTextView = (TextView)findViewById(R.id.mytextview);
- //定义了一个ArrayAdapter,将datas数组与simple_spinner_item绑定
- //android.R.layout.simple_spinner_item是由Android提供的一种标准spinner的布局
- arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,datas);
- //声明当控件打开时的外观:为系统提供的simple_spinner_dropdown_item
- arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item );
- spinner.setAdapter(arrayAdapter);
- //为spinner添加选择事件监听器
- spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- myTextView.setText("你选择了"+datas[position]);
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- myTextView.setText("OK");
- }
- });
- spinner.setVisibility(View.VISIBLE);
- }
- }
显示的效果如下:
另一种添加数据的方式:使用资源文件xml
先在资源文件中定义一个盛放spinner数据的xml文件:这里起名为:spinnerdata.xml,其内容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <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>
xml文件名是什么不重要,重要的是你要有一个<string-array name="...">的元素来封装spinner的数据,当你产生了这样的xml,打开 你的gen文件下的R.java文件,你会发现Android开发工具为你的string-array添加了一个ID:
- public final class R {
- public static final class array {
- public static final int planets_array=0x7f040000;//新添加的
- }
- //...
- }
然后后在Activity类中,我们就可以加载上面的资源文件,并将其与spinner绑定,如下:
- public class SpinnerActivity extends Activity {
- private Spinner spinner = null;
- private TextView myTextView = null;
- //CharSequence是一个接口,定义了一个盛放字符的有序集合,它还定义了一些方法来检索内部的字符
- private ArrayAdapter<CharSequence> arrayAdapter = null;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- spinner = (Spinner) findViewById(R.id.myspinner);
- myTextView = (TextView) findViewById(R.id.mytextview);
- //创建一个ArrayAdapter,它将每个item与string array的数据绑定
- arrayAdapter = ArrayAdapter.createFromResource(this,
- R.array.planets_array, android.R.layout.simple_spinner_item);
- //定义spinner打开时的layout
- arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinner.setAdapter(arrayAdapter);
- // 为spinner添加选择事件监听器
- spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view,
- int position, long id) {
- //注意获取选择数据的方式:
- myTextView.setText("你选择了"+ parent.getItemAtPosition(position).toString());
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- myTextView.setText("OK");
- }
- });
- spinner.setVisibility(View.VISIBLE);
- }
- }