本文地址: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

 package com.example.android_spinner;

 import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView; public class MainActivity extends Activity { private Spinner mSpinner;
private TextView mTextview;
private List<String> cities = new ArrayList<String>();
private ArrayAdapter<String> adapter;
private String mStr; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initData();
initEvent();
} private void initData() {
mStr = getResources().getString(R.string.main_city);
// 添加spinner列表项
cities.add("Beijing");
cities.add("Shanghai");
cities.add("Guangzhou");
cities.add("Shenzhen");
cities.add("Nanjing"); mTextview = (TextView) findViewById(R.id.testview);
mSpinner = (Spinner) findViewById(R.id.spinner); String str = String.format(mStr, cities.get(0));
mTextview.setText(str); // 为下拉列表创建adapter
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, cities); // 为adapter设置下拉菜单样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // spinner设置adapter
mSpinner.setAdapter(adapter); } private void initEvent() {
// 添加spinner事件
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
String str = String.format(mStr, adapter.getItem(position));
mTextview.setText(str); parent.setVisibility(View.VISIBLE);
} @Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
mTextview.setText("None selected");
parent.setVisibility(View.VISIBLE);
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

效果:

参考

android下拉菜单spinner的使用方法

[Android] Spinners介绍及用法的更多相关文章

  1. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  2. android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...

  3. Android monkey介绍

    Android monkey介绍 原文地址 1 简略 monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备).它会向系统发送随机事件流(即 ...

  4. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  5. android Animation介绍

    Animation介绍: 在Android SDK介绍了2种Animation模式: 1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果,即 ...

  6. android AsyncTask介绍(转)

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

  7. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

  8. 【转】Android各种Adapter的用法

    转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56)   阅读(143 ...

  9. oc-12-NSString 类简单介绍及用法

    // 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...

随机推荐

  1. python再探

    python是一门强大的高级编程语言,之前的文章中介绍了python的基础知识,接下来会介绍一些python更为高级的知识. 面向对象编程 基本知识 一般编程思想分为面向过程和面向对象,前者的基本单元 ...

  2. 浅谈Retrofit2+Rxjava2

    近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门...由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方,还 ...

  3. curl常用命令【转】

    原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/ 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://w ...

  4. DataSet 多表关系

    protected void Page_Load(object sender, EventArgs e) { string connectionString = @"Data Source= ...

  5. gateway-workman

    最外层start.php,设置全局启动模式,加载Application里的个子服务目录下应用的启动文件(start开头,这些文件都是workman\work类的子类,在载入文件的同时,这些子服务会生成 ...

  6. java 写法推荐

    1. for循环 for (int i = 0; i < list.size(); i++) { int item = list.get(i); System.out.println(" ...

  7. SpringBoot学习(一)——Spring的发展

    一.Spring1.x时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在Java类和xml配置文件中切换. 二.S ...

  8. 求XF+闭包(第十一届河南省省赛真题)

    题目描述 如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1 ...

  9. zoj 2104 Let the Balloon Rise(map映照容器的应用)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2104 题目描述: Contest time again! Ho ...

  10. 邂逅jQuery

    jQuery是一个流行的JavaScript库,提供了HTML操作,CSS操作,事件,动画,Ajax和常用插件,极大地简化了JavaScript的开发. 可以从jquery.com下载jQuery库, ...