[Android]Spinners介紹及用法,androidspinners

來源:互聯網
上載者:User

[Android]Spinners介紹及用法,androidspinners
 

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

Spinners介紹

  Spinners提供了從一個集(set)中選擇某個值(value)的一個快速的方法。在預設狀態,一個spinner顯示它當前選擇的一個值。觸摸spinner會顯示一個含有所有其他有效值的下拉式功能表,使用者可以從中選擇一個新值。

  你可以使用 Spinner 對象在布局中添加一個 spinner。你應該在你的XML布局檔案中使用 <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的有效選項是預先確定好的,你可以用一個在資源檔中定義好的數組來提供選項:

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

  使用像這樣的數組,你可以在你的 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

XML Attributes
Attribute Name Related Method Description
 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
int MODE_DIALOG Use a dialog window for selecting spinner options.
int MODE_DROPDOWN Use a dropdown anchored to the Spinner for selecting spinner options.

 

 

 

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

 

簡單的例子

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="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.xml

<?xml version="1.0" encoding="utf-8"?><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.xml. 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的使用方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.