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
[xhtml] view plain copy print ?
- <?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>
<?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指定数据:在代码中指定和加载资源文件中数据
先看在代码中指定的方式:
[java] view plain copy print ?
- 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;
-
- @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 = new ArrayAdapter(this,android.R.layout.simple_spinner_item,datas);
-
- arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item );
-
- spinner.setAdapter(arrayAdapter);
-
- 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);
-
- }
- }
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,其内容如下:
[xhtml] view plain copy print ?
- <?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 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:
[java] view plain copy print ?
- public final class R {
- public static final class array {
- public static final int planets_array=0x7f040000;
- }
-
- }
public final class R { public static final class array { public static final int planets_array=0x7f040000;//新添加的 } //... }
然后后在Activity类中,我们就可以加载上面的资源文件,并将其与spinner绑定,如下:
[java] view plain copy print ?
- public class SpinnerActivity extends Activity {
- private Spinner spinner = null;
- private TextView myTextView = null;
-
- private ArrayAdapter<CharSequence> arrayAdapter = null;
-
- @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 = ArrayAdapter.createFromResource(this,
- R.array.planets_array, android.R.layout.simple_spinner_item);
-
- arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- spinner.setAdapter(arrayAdapter);
-
- 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);
- }
- }
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); } }
