简介:

  spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择。Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装。

  下面介绍一下Spinner的常用XML属性,Android也为其属性提供了相应的getter、setter方法:

  • android:spinnerMode:列表显示的模式,有两个选择,为弹出列表(dialog)以及下拉列表(dropdown),如果不特别设置,为下拉列表。。
  • android:entries:使用<string-array.../>资源配置数据源。
  • android:prompt:对当前下拉列表设置标题,仅在dialog模式下有效。传递一个“@string/name”资源,需要在需要在资源文件中定义<string.../>。

  作为一个列表选择控件,Spinner具有一些选中选项可以触发的事件,但它本身没有定义这些事件,均继承自间接父类AdapterView。Spinner支持的几个常用事件有以下几个:

  • AdapterView.OnItemCLickListener:列表项被点击时触发。
  • AdapterView.OnItemLongClickListener:列表项被长按时触发。
  • AdapterView.OnItemSelectedListener:列表项被选择时触发。

  PS:因为适配器可以设置各种不同的样式,有选择、单选、多选,所以OnItemCLickListener和OnItemSelectedListener是适用于不同场景的。

数据绑定:

 对于Spinner展示的数据源,一般使用两种方式设定数据:

  • 通过XML资源文件设置,这种方式比较死板,但是如果仅仅需要展示固定的、简单的数据,这种方式还是可以考虑的,比较直观。
  • 使用Adapter接口设置,这是最常见的方式,动态、灵活,可以设定各种样式以及数据来源。

  先来讲讲通过XML资源文件设置Spinner数据的方式,首先需要在/res/values目录下新建XML格式的资源文件,名字不重要,但是一般会使用strings.xml。在其中的<resourse.../>标签下,定义<string-array.../>标签,通过它中的<item.../>标签来设置选择数据。

  XML文件结构:

  <resource>

    <string-array name="arrayname">

      <item>item1</item>

      <item>item2</item>

      <item>item3</item>

    </string-array>

  <resource>

布局代码:

 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="wrap_content"
9 android:layout_height="wrap_content"
10 android:text="弹出的Spinner" />
11
12 <Spinner
13 android:id="@+id/spinnerBase"
14 android:layout_width="match_parent"
15 android:layout_height="wrap_content"
16 android:spinnerMode="dialog" />
17
18 <TextView
19 android:layout_width="wrap_content"
20 android:layout_height="wrap_content"
21 android:text="下拉的Spinner(默认)" />
22
23 <Spinner
24 android:id="@+id/spinnerBase1"
25 android:layout_width="match_parent"
26 android:layout_height="wrap_content"
27 android:spinnerMode="dropdown" />
28
29 <TextView
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:text="entries绑定数据源" />
33
34 <Spinner
35 android:id="@+id/spinnerBase2"
36 android:layout_width="match_parent"
37 android:layout_height="wrap_content"
38 android:entries="@array/beijing" />
39
40 <TextView
41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content"
43 android:text="弹出带标题的Dialog,并且使用entries绑定数据源" />
44
45 <Spinner
46 android:id="@+id/spinnerBase3"
47 android:layout_width="match_parent"
48 android:layout_height="wrap_content"
49 android:entries="@array/beijing"
50 android:prompt="@string/beij_prompt"
51 android:spinnerMode="dialog" />
52
53 </LinearLayout> List数据:
<?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <string name="app_name">SpinnerDemo</string>
4 <string name="action_settings">Settings</string>
5 <string name="hello_world">Hello world!</string>
6 <string name="beij_prompt">北京区域</string>
7 <string-array name="beijing">
8 <item>朝阳区</item>
9 <item>海淀区</item>
10 <item>房山区</item>
11 <item>丰台区</item>
12 <item>东城区</item>
13 <item>西城区</item>
14 </string-array>
15 </resources>

主代码:
1 package com.bgxt.datatimepickerdemo;
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.View;
9 import android.widget.AdapterView;
10 import android.widget.AdapterView.OnItemSelectedListener;
11 import android.widget.ArrayAdapter;
12 import android.widget.Spinner;
13 import android.widget.Toast;
14
15 public class SpinnerBaseActivity extends Activity {
16 private Spinner spinner1, spinner2;
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_spinnerbase);
22
23 spinner1 = (Spinner) findViewById(R.id.spinnerBase);
24 spinner2 = (Spinner) findViewById(R.id.spinnerBase1);
25 // 声明一个ArrayAdapter用于存放简单数据
26 ArrayAdapter<String> adapter = new ArrayAdapter<String>(
27 SpinnerBaseActivity.this, android.R.layout.simple_spinner_item,
28 getData());
29 // 把定义好的Adapter设定到spinner中
30 spinner1.setAdapter(adapter);
31 spinner2.setAdapter(adapter);
32 // 为第一个Spinner设定选中事件
33 spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
34
35 @Override
36 public void onItemSelected(AdapterView<?> parent, View view,
37 int position, long id) {
38 // 在选中之后触发
39 Toast.makeText(SpinnerBaseActivity.this,
40 parent.getItemAtPosition(position).toString(),
41 Toast.LENGTH_SHORT).show();
42 }
43
44 @Override
45 public void onNothingSelected(AdapterView<?> parent) {
46 // 这个一直没有触发,我也不知道什么时候被触发。
47 //在官方的文档上说明,为back的时候触发,但是无效,可能需要特定的场景
48 }
49 });
50
51 }
52
53 private List<String> getData() {
54 // 数据源
55 List<String> dataList = new ArrayList<String>();
56 dataList.add("北京");
57 dataList.add("上海");
58 dataList.add("南京");
59 dataList.add("宜昌");
60 return dataList;
61 }
62
63 }

												

Spinner的深入学习的更多相关文章

  1. Spinner的简单学习

    代码分析: package com.mecury.spinnertest; import java.util.ArrayList; import android.support.v7.app.Acti ...

  2. 第二百一十六节,jQuery EasyUI,Spinner(微调)组件

    jQuery EasyUI,Spinner(微调)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个 ...

  3. Android零基础入门第46节:下拉框Spinner

    原文:Android零基础入门第46节:下拉框Spinner 上一期学习了GridView的使用,你已经掌握了吗?本期一起来学习Spinner的使用. 一.认识Spinner Spinner其实就是一 ...

  4. Android学习笔记之Spinner

    pinner就相当于Html中的下拉列表框,在下面的例子里我们共同学习一下spinner的使用. 属性: 属性名称 描述 android:prompt 该提示在下拉列表对话框显示时显示.(译者注:对话 ...

  5. android 学习 Spinner控件的使用

    今晚看了下spinner控件的使用,结合博客大神的教程,一个小demo 一,SpinnerActivity private Spinner spinner; private ArrayAdapter& ...

  6. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  7. 4.Android下拉列表框spinner学习

    下拉列表框被广泛使用,诸如淘宝.京东等手机端经常可以看到这个部件身影,今天就来学习下它. 首先布局文件增加代码:如图 接下来在values下增加arrays.xml 如图               ...

  8. android学习笔记六——Spinner

    注:参考http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0105/2264.html Spinner ==> Spinner ...

  9. android下拉菜单 spinner 学习

    首先看一下继承关系: public class Spinner extends AbsSpinner implements DialogInterface.OnClickListener Class ...

随机推荐

  1. js不间断平滑地自动向上滚动

    <html> <head> <title>scroll up auto smooth</title> <style> *{ margin: ...

  2. hdu 1114 Piggy-Bank

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  3. Tomcat 配置 Context

    在 conf/Catalina/localhost/ 下添加 xml配置文件,文件名和站点名一致. 配置文件示例 <?xml version='1.0' encoding='utf-8'?> ...

  4. 【转载】Android内存泄露

    相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今 ...

  5. 获取iframe的元素并进行操作

    获取iframe中的document元素有一下集中方法: 1.getElementById()方法和contentWindow属性: window.onload=function(){ /*必须等待页 ...

  6. 将公司的主要项目从eclipse迁移到android studio for mac环境(1)

    上星期,我决定要解决这个问题.理由如下: 3个月之前,我已经投入一段时间要做好这个迁移工作,直到最后,我发现能够安装了,但是运行不了,这个过程也看不到bugly上传,在找不到原因的情况下,我放弃了. ...

  7. AngularJS学习笔记之directive—scope选项与绑定策略

    From:http://www.linuxidc.com/Linux/2015-05/116924.htm scope:{}使指令与外界隔离开来,使其模板(template)处于non-inherit ...

  8. H5 浏览器开发文档

    http://sja.co.uk/controlling-which-ios-keyboard-is-shown https://developer.apple.com/library/safari/ ...

  9. 移动端H5页面之iphone6的适配(转)

    iphone6 及 iphone 6 plus 已经出来一段时间了.很多移动端网站,以前写死body 为320px的,现在估计也忙着做适配了. 大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H ...

  10. 20145304 Java第四周学习报告

    20145304<Java程序设计>第四周学习总结 教材学习内容总结 1.继承共同行为: 继承基本上就是避免多个类间重复定义共同行为,关键词为extends. 代码如下: //继承共同行为 ...