你的位置:首页 > 操作系统

[操作系统][Android]Spinners介绍及用法


 

本文地址:http://www.cnblogs.com/rossoneri/p/4366018.html 

Spinners介绍

  Spinners提供了从一个集(set)中选择某个值(value)的一个快速的方法。在缺省状态,一个spinner显示它当前选择的一个值。触摸spinner会显示一个含有所有其他有效值的下拉菜单,用户可以从中选择一个新值。

  你可以使用 Spinner 对象在布局中添加一个 spinner。你应该在你的<Spinner> 元素来添加。比如:

<Spinner  android:id="@+id/planets_spinner"  android:layout_width="fill_parent"  android:layout_height="wrap_content" />

  为了用一个选项列表填充(populate) spinner,你需要在你的 Activity 或者 Fragment 源码中指定(specify)一个 SpinnerAdapter。

 

用用户的选项来填充Spinner(Populate the Spinner with User Choices)

  你可以使用任何来源的选项来填充spinner,但一定要通过一个SpinnerAdapter来提供,比如一个ArrayAdapter,如果那些从数据库查询出来的选项是可用的,保存在一个array或者一个CursorAdapter里且有效的话。

  比如说,如果那些用来填充spinner的有效选项是预先确定好的,你可以用一个在资源文件中定义好的数组来提供选项:

<??><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>

  使用像这样的数组,你可以在你的 Activity 或者 Fragment 用以下代码借助一个 ArrayAdapter 的实例来为 spinner 提供数据:

Spinner spinner = (Spinner) findViewById(R.id.spinner);// Create an ArrayAdapter using the string array and a default spinner layoutArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,    R.array.planets_array, android.R.layout.simple_spinner_item);// Specify the layout to use when the list of choices appearsadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// Apply the adapter to the spinnerspinner.setAdapter(adapter);

  createFromResource() 方法允许你从一个 string array 中创建一个 ArrayAdapter。其第三个参数是一个定义了被选中的选项如何在 spinner 控件中显示的布局资源。simple_spinner_item 是一个平台提供的布局,也是你应该用的默认布局,除非你希望定义自己的 spinner 外观。

  之后你要调用 setDropDownViewResource(int) 来指定 spinner 显示下拉选项的布局样式(simple_spinner_dropdown_item 是另一个平台提供的标准布局)。

  调用 setAdapter() 把你的 adapter 应用到 Spinner。

 

用户选择的响应(Responding to User Selections)

  当用户从下拉菜单选择了一项内容, Spinner 对象接收到一个 on-item-selected 的事件。

  为 spinner 定义一个选择事件的处理方法,实现 AdapterView.OnItemSelectedListener 接口和对应的(corresponding) onItemSelected() 回调方法。比如:

public class SpinnerActivity extends Activity implements OnItemSelectedListener {  ...    public void onItemSelected(AdapterView<?> parent, View view,       int pos, long id) {    // An item was selected. You can retrieve the selected item using    // parent.getItemAtPosition(pos)  }  public void onNothingSelected(AdapterView<?> parent) {    // Another interface callback  }}

   AdapterView.OnItemSelectedListener 要求 onItemSelected() 和 onNothingSelected() 回调方法。

  然后你需要调用 setOnItemSelectedListener 指定接口的实现 (specify the interface implementation):

Spinner spinner = (Spinner) findViewById(R.id.spinner);spinner.setOnItemSelectedListener(this);

  如果你在你的 Activity 或者 Fragment 实现 AdapterView.OnItemSelectedListener 接口(就像上面的例子),你可以传递 this 作为接口实例。

 

Spinner类需要了解的内容

public class Spinner extends AbsSpinner implements DialogInterface.OnClickListener

Attribute NameRelated MethodDescription
 android:dropDownHorizontalOffset setDropDownHorizontalOffset(int)Amount of pixels by which the drop down should be offset horizontally. 
 android:dropDownSelector List selector to use for spinnerMode="dropdown" display. 
 android:dropDownVerticalOffset setDropDownVerticalOffset(int) Amount of pixels by which the drop down should be offset vertically. 
 android:dropDownWidth setDropDownWidth(int) Width of the dropdown in spinnerMode="dropdown". 
 android:gravity setGravity(int) Gravity setting for positioning the currently selected item. 
 android:popupBackground setPopupBackgroundResource(int) Background drawable to use for the dropdown in spinnerMode="dropdown". 
 android:prompt  The prompt to display when the spinner's dialog is shown. 
 android:spinnerMode  Display mode for spinner options. 

 

 

  

  

  

Constants
intMODE_DIALOGUse a dialog window for selecting spinner options.
intMODE_DROPDOWNUse a dropdown anchored to the Spinner for selecting spinner options.

 

 

 

其他的一些方法就不列了,用什么查什么好了。

 

简单的例子

activity_main.

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  tools:context="com.example.android_spinner.MainActivity" >  <TextView    android:id="@+id/testview"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/main_city" />  <Spinner    android:id="@+id/spinner"    android:layout_width="wrap_content"    android:layout_height="wrap_content" /></LinearLayout>

strings.

<??><resources>  <string name="app_name">Android_spinner</string>  <string name="hello_world">Hello world!</string>  <string name="action_settings">Settings</string>  <string name="main_city">Choose your city : %1$s</string></resources>

MainActivity.java

 1 package com.example.android_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.view.Menu; 9 import android.view.MenuItem; 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 import android.widget.TextView; 16  17 public class MainActivity extends Activity { 18  19   private Spinner mSpinner; 20   private TextView mTextview; 21   private List<String> cities = new ArrayList<String>(); 22   private ArrayAdapter<String> adapter; 23   private String mStr; 24  25   @Override 26   protected void onCreate(Bundle savedInstanceState) { 27     super.onCreate(savedInstanceState); 28     setContentView(R.layout.activity_main); 29  30     initData(); 31     initEvent(); 32   } 33  34   private void initData() { 35     mStr = getResources().getString(R.string.main_city); 36     // 添加spinner列表项 37     cities.add("Beijing"); 38     cities.add("Shanghai"); 39     cities.add("Guangzhou"); 40     cities.add("Shenzhen"); 41     cities.add("Nanjing"); 42  43     mTextview = (TextView) findViewById(R.id.testview); 44     mSpinner = (Spinner) findViewById(R.id.spinner); 45  46     String str = String.format(mStr, cities.get(0)); 47     mTextview.setText(str); 48  49     // 为下拉列表创建adapter 50     adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, cities); 51  52     // 为adapter设置下拉菜单样式 53     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 54  55     // spinner设置adapter 56     mSpinner.setAdapter(adapter); 57  58   } 59  60   private void initEvent() { 61     // 添加spinner事件 62     mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 63  64       @Override 65       public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 66         // TODO Auto-generated method stub 67         String str = String.format(mStr, adapter.getItem(position)); 68         mTextview.setText(str); 69  70         parent.setVisibility(View.VISIBLE); 71       } 72  73       @Override 74       public void onNothingSelected(AdapterView<?> parent) { 75         // TODO Auto-generated method stub 76         mTextview.setText("None selected"); 77         parent.setVisibility(View.VISIBLE); 78       } 79     }); 80  81   } 82  83   @Override 84   public boolean onCreateOptionsMenu(Menu menu) { 85     // Inflate the menu; this adds items to the action bar if it is present. 86     getMenuInflater().inflate(R.menu.main, menu); 87     return true; 88   } 89  90   @Override 91   public boolean onOptionsItemSelected(MenuItem item) { 92     // Handle action bar item clicks here. The action bar will 93     // automatically handle clicks on the Home/Up button, so long 94     // as you specify a parent activity in AndroidManifest. 95     int id = item.getItemId(); 96     if (id == R.id.action_settings) { 97       return true; 98     } 99     return super.onOptionsItemSelected(item);100   }101 }

效果:

 

参考

android下拉菜单spinner的使用方法