Spinner的简单操作

来源:互联网 发布:windows api 激活窗口 编辑:程序博客网 时间:2024/05/21 13:39



      可见Spinner是继承ViewGroup的,因此也可作为容器所用。    Spinner支持如下xml属性

  

详细请参考Android API文档


 下面就来实战一下,如何使用Spinner

       如果使用的Spinner时已经可以确定弹出窗口列表的内容,则不需要编写代码,直接给Spinner指定android:entries属性即可

(1)编写布局文件   activity_main.xml

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent">  
  6.       
  7.     <Spinner  
  8.         android:id="@+id/spinner"  
  9.          android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:entries="@array/language"/>  
  12. </LinearLayout>  


(2) 编写下拉内容   strings.xml


[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">Spinner</string>  
  5.     <string name="action_settings">Settings</string>  
  6.     <string name="hello_world">Hello world!</string>  
  7.     <string-array name="language">  
  8.         <item>英语</item>          
  9.         <item>中文</item>          
  10.         <item>日语</item>          
  11.         <item>韩语</item>          
  12.         <item>西班牙语</item>          
  13.         <item>法语</item>          
  14.         <item>俄语</item>          
  15.     </string-array>  
  16.   
  17. </resources>  

完成上面两步,一个简单的Spinner效果就出来了,如图:



如果Spinner的弹出窗口内容不是确定的,需要动态添加,那又如何实现呢?   下面我们完成一个复杂一点的Spinner案例。

   说明:案例涉及Spinner的知识点有:(1)动态添加弹出窗口内容 和确定弹出窗口内容两种方式   (2)自定义弹出窗口          (3)实现Spinner监听


(1)编写布局文件   activity_main.xml

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent">  
  7.     <TextView  
  8.         android:id="@+id/info_city"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/city_prompt" />  
  12.     <Spinner  
  13.         android:id="@+id/mycity"  
  14.         android:prompt="@string/city_prompt"  
  15.         android:layout_width="250dp"  
  16.         android:layout_height="wrap_content"  
  17.         android:entries="@array/city"  
  18.         android:layout_gravity="center_vertical"  
  19.         android:layout_marginLeft="30dp"  
  20.         />  
  21.     
  22.     <TextView  
  23.         android:id="@+id/info_edu"  
  24.         android:layout_width="fill_parent"  
  25.         android:layout_height="wrap_content"  
  26.         android:text="@string/education_prompt" />  
  27.     <Spinner  
  28.         android:id="@+id/myedu"  
  29.         android:layout_width="250dp"  
  30.         android:layout_height="wrap_content"   
  31.         android:layout_gravity="center_vertical"  
  32.         android:layout_marginLeft="30dp"/>  
  33.   
  34. </LinearLayout>  

(2)编写strings.xml

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">Spinner</string>  
  5.     <string name="action_settings">Settings</string>  
  6.     <string name="hello_world">Hello world!</string>  
  7.     <string name="city_prompt">请选择您喜欢的城市:</string>  
  8.     <string name="education_prompt">请选择学历:</string>  
  9. </resources>  


(3) 编写城市array,下拉内容      city_data.xml

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string-array name="city">  
  4.         <item>北京</item>  
  5.         <item>上海</item>  
  6.         <item>广州</item>  
  7.         <item>深圳</item>  
  8.         <item>天津</item>  
  9.         <item>杭州</item>  
  10.     </string-array>  
  11. </resources>  

(4)  编写 MainActivity.java
 

       步骤:(1)找到布局的Spinner     

                   (2)动态添加spinner的内容list 集合               

                   (3)定义并设置适配器ArrayAdapter             

                   (4)给Spinner设置关联适配器       

                   (5)给Spinner设置监听器

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.example.spinner;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.Menu;  
  10. import android.view.View;  
  11. import android.widget.AdapterView;  
  12. import android.widget.AdapterView.OnItemSelectedListener;  
  13. import android.widget.ArrayAdapter;  
  14. import android.widget.Spinner;  
  15.   
  16. public class MainActivity extends Activity {  
  17.       
  18.     private Spinner spinnerEdu = null; //定义学历的spinner  
  19.     private Spinner spinerCity = null; //定义城市spinner  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.           
  26.         this.spinnerEdu = (Spinner) findViewById(R.id.myedu);  //获取学历spinner组件  
  27.         this.spinerCity = (Spinner) findViewById(R.id.mycity); //获取城市spinner组件  
  28.           
  29.         //参数一:上下文           参数二:内容数组      参数三:spinner样式   
  30.         ArrayAdapter<CharSequence> cityAdapter  = ArrayAdapter.createFromResource(this, R.array.city, android.R.layout.simple_list_item_multiple_choice);  
  31.         this.spinerCity.setAdapter(cityAdapter); //spinner设置适配器  
  32.         this.spinerCity.setSelection(3);  //默认选中  
  33.                   
  34.         List<CharSequence> list = new ArrayList<CharSequence>(); //list集合,  
  35.         list.add("小学");  
  36.         list.add("初中");  
  37.         list.add("高中");  
  38.         list.add("大专");  
  39.         list.add("本科");  
  40.         list.add("研究生");  
  41.         list.add("博士");  
  42.         //参数一:上下文           参数二:spinner样式      参数三:内容list  
  43.         ArrayAdapter<CharSequence> eduAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_single_choice, list);  
  44.         this.spinnerEdu.setAdapter(eduAdapter);  //spinner设置适配器  
  45.           
  46.         //为spinnerEdu添加监听器  
  47.         this.spinnerEdu.setOnItemSelectedListener(new OnItemSelectedListener() {  
  48.   
  49.             @Override  
  50.             //选中项  
  51.             public void onItemSelected(AdapterView<?> parent, View view,  
  52.                     int position, long id) {  
  53.                 String currChose = parent.getItemAtPosition(position).toString();  
  54.                 Log.i("你的学历是:", currChose);  
  55.             }  
  56.   
  57.             @Override  
  58.             public void onNothingSelected(AdapterView<?> parent) {  
  59.                 Log.i("onNothingSelected", "onNothingSelected");  
  60.                   
  61.             }  
  62.         });  
  63.           
  64.           
  65.     }  
  66.   
  67.     @Override  
  68.     public boolean onCreateOptionsMenu(Menu menu) {  
  69.         // Inflate the menu; this adds items to the action bar if it is present.  
  70.         getMenuInflater().inflate(R.menu.main, menu);  
  71.         return true;  
  72.     }  
  73.   
  74. }  


经过上面的步骤,到这来已经完成了一个Spinner的案例了,效果如下:


每次选择学历,监听器都会监听改变的结果


                
0 0