Android常用控件-spinner


  
分类: Android基础 2495人阅读 评论(1) 收藏 举报

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

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     <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"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.   <TextView  
  8.         android:id="@+id/mytextview"      
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_marginTop="10dip"  
  12.         android:text="@string/planet_prompt"  
  13.     />  
  14. <Spinner   
  15.     android:id="@+id/myspinner"  
  16.     android:layout_width="fill_parent"  
  17.     android:layout_height="wrap_content"  
  18.     android:drawSelectorOnTop="false"  
  19.     android:prompt="@string/write"  
  20.     />  
  21. </LinearLayout>  
 

android:prompt属性指定了spinner弹出选择框时的标题

 

2、为Spinner指定数据

有两种方式为spinner指定数据:在代码中指定和加载资源文件中数据

先看在代码中指定的方式:

  1. public class SpinnerActivity extends Activity {  
  2.     private Spinner spinner = null;  
  3.     private TextView myTextView = null;  
  4.     private static final String[] datas = {"China","Japan","USA"};  
  5.     private ArrayAdapter<String> arrayAdapter = null;  
  6.     /** Called when the activity is first created. */  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         spinner = (Spinner)findViewById(R.id.myspinner);  
  12.         myTextView = (TextView)findViewById(R.id.mytextview);  
  13.         //定义了一个ArrayAdapter,将datas数组与simple_spinner_item绑定  
  14.         //android.R.layout.simple_spinner_item是由Android提供的一种标准spinner的布局  
  15.         arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,datas);  
  16.         //声明当控件打开时的外观:为系统提供的simple_spinner_dropdown_item   
  17.         arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item );  
  18.          
  19.         spinner.setAdapter(arrayAdapter);  
  20.         //为spinner添加选择事件监听器  
  21.         spinner.setOnItemSelectedListener(new OnItemSelectedListener() {  
  22.             @Override  
  23.             public void onItemSelected(AdapterView<?> parent, View view,  
  24.                                                     int position, long id) {  
  25.                 myTextView.setText("你选择了"+datas[position]);  
  26.             }  
  27.             @Override  
  28.             public void onNothingSelected(AdapterView<?> parent) {  
  29.                 myTextView.setText("OK");  
  30.             }  
  31.         });  
  32.         spinner.setVisibility(View.VISIBLE);  
  33.           
  34.     }  
  35. }  
 

显示的效果如下:

 

另一种添加数据的方式:使用资源文件xml

先在资源文件中定义一个盛放spinner数据的xml文件:这里起名为:spinnerdata.xml,其内容如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string-array name="planets_array">  
  4.         <item>Mercury</item>  
  5.         <item>Venus</item>  
  6.         <item>Earth</item>  
  7.         <item>Mars</item>  
  8.         <item>Jupiter</item>  
  9.         <item>Saturn</item>  
  10.         <item>Uranus</item>  
  11.         <item>Neptune</item>  
  12.     </string-array>  
  13. </resources>  

xml文件名是什么不重要,重要的是你要有一个<string-array name="...">的元素来封装spinner的数据,当你产生了这样的xml,打开 你的gen文件下的R.java文件,你会发现Android开发工具为你的string-array添加了一个ID:

  1. public final class R {  
  2.     public static final class array {  
  3.         public static final int planets_array=0x7f040000;//新添加的  
  4.     }  
  5. //...  
  6. }  
 

然后后在Activity类中,我们就可以加载上面的资源文件,并将其与spinner绑定,如下:

  1. public class SpinnerActivity extends Activity {  
  2.     private Spinner spinner = null;  
  3.     private TextView myTextView = null;  
  4.     //CharSequence是一个接口,定义了一个盛放字符的有序集合,它还定义了一些方法来检索内部的字符  
  5.     private ArrayAdapter<CharSequence> arrayAdapter = null;  
  6.     /** Called when the activity is first created. */  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         spinner = (Spinner) findViewById(R.id.myspinner);  
  12.         myTextView = (TextView) findViewById(R.id.mytextview);  
  13.         //创建一个ArrayAdapter,它将每个item与string array的数据绑定  
  14.         arrayAdapter = ArrayAdapter.createFromResource(this,  
  15.                 R.array.planets_array, android.R.layout.simple_spinner_item);  
  16.         //定义spinner打开时的layout  
  17.         arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  18.         spinner.setAdapter(arrayAdapter);  
  19.         // 为spinner添加选择事件监听器  
  20.         spinner.setOnItemSelectedListener(new OnItemSelectedListener() {  
  21.             @Override  
  22.             public void onItemSelected(AdapterView<?> parent, View view,  
  23.                     int position, long id) {  
  24.                 //注意获取选择数据的方式:  
  25.                 myTextView.setText("你选择了"+ parent.getItemAtPosition(position).toString());  
  26.             }  
  27.             @Override  
  28.             public void onNothingSelected(AdapterView<?> parent) {  
  29.                 myTextView.setText("OK");  
  30.             }  
  31.         });  
  32.         spinner.setVisibility(View.VISIBLE);  
  33.     }  
  34. }  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值