• [Android] Spinners介绍及用法


     

    本文地址: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 layout
    ArrayAdapter<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 appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner.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的使用方法

  • 相关阅读:
    raw_input() 与 input() __ Python
    局域网文件夹上传解决方案
    网页文件夹上传解决方案
    前端文件夹上传解决方案
    JavaScript文件夹上传解决方案
    JS文件夹上传解决方案
    VUE文件夹上传解决方案
    WebUploader文件夹上传解决方案
    B/S文件夹上传解决方案
    CSharp文件夹上传解决方案
  • 原文地址:https://www.cnblogs.com/rossoneri/p/4366018.html
Copyright © 2020-2023  润新知