Android Spinner

在Android的UI开发中,Spinner(下拉列表)总是可以用到的

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

Spinner

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

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

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

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

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

Spinner的数据绑定

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

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

Spinner使用XML资源文件设置数据

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

XML文件结构:

<?xml version="1.0" encoding="utf-8"?><resources>     ……    <string-array name="arrayname">        <item>item1item>        <item>item2item>        <item>item3item>    string-array>    ……resources>

通过适配器Adapter可以设定比较复杂的展示效果,一般项目中比较常用的也是这种方式。

下面通过一个示例,讲解一下上面说的属性、事件,以及使用ArrayAdapter和XML资源文件设定简单数据,代码中注释已经说的很清楚了,这里就不再累述了。

部分布局代码:

    <TextView        android:id="@+id/tv_spinner_entriesshow"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#f2f2f2"        android:padding="10dp"        android:text="(entries)您的选择的是"        android:textSize="16sp" >    TextView>    <Spinner        android:id="@+id/sp_spinner_entriescontent"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:entries="@array/arrayname" >    Spinner>

然后在Activity里,直接使用

Resources res =getResources();String[] arraynames=res.getStringArray(R.array.arrayname);

即可取得"下的所有item数据,简单又方便的一种方法。

Spinner使用Adapter接口设置数据

下面介绍一下最简单的Spinner使用Adapter接口设置数据

  • 新建一个Android工程,名字为SpinnerTest。修改layout下的activity_main.xml,添加一个Textview和一个Spinner,文件内容如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:tools="http://schemas.android.com/tools"    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#d7d7d7"    android:orientation="vertical"    tools:context="com.ylbf.spinnertest.MainActivity" >    <TextView        android:id="@+id/tv_spinner_show"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#f2f2f2"        android:padding="10dp"        android:text="您的选择的是"        android:textSize="16sp" >    TextView>    <Spinner        android:id="@+id/sp_content"        android:layout_width="fill_parent"        android:layout_height="wrap_content" >    Spinner>    LinearLayout>
  • 修改你的MainActivity.class类,在这里我们就要自定义一个Spinner了,完整代码如下:
package com.ylbf.spinnertest;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;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 TextView tv_show;    private Spinner sp_content;    private List list = new ArrayList();    private ArrayAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findView();        init();        setEvent();        display();    }    private void display() {        //为下拉列表定义一个适配器,这里就用到里前面定义的list。        adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);        //为适配器设置下拉列表下拉时的菜单样式。        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        sp_content.setAdapter(adapter);    }    private void init() {        list.add("北京");        list.add("上海");        list.add("深圳");        list.add("南京");        list.add("重庆");    }    private void setEvent() {        //为下拉列表设置各种事件的响应,这个事响应菜单被选中        sp_content.setOnItemSelectedListener(new OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                tv_show.setText("您选择的是:"+ adapter.getItem(position));                //或者使用以下方法 在提交取值时比较方便                //tv_show.setText("您选择的是:"+ sp_content.getSelectedItem().toString());            }            @Override            public void onNothingSelected(AdapterView<?> parent) {                tv_show.setText("请您选择内容");            }        });    }    private void findView() {        tv_show = (TextView) findViewById(R.id.tv_spinner_show);        sp_content = (Spinner) findViewById(R.id.sp_spinner_content);    }}

上面完成了Spinner最简单的选择一个内容,以一个TextView展示选择内容,Spinner使用Adapter接口设置数据;

更多相关文章

  1. APEX - Android(安卓)Q
  2. Android的Zipalign优化
  3. Android(安卓)Studio删除无用的资源文件
  4. Android学习笔记:框架模式
  5. Android(安卓)NDK开发之旅1--NDK介绍
  6. Android(安卓)Studio报错org.junit不存在问题
  7. Android仿微信实现下拉列表
  8. android中搭建phonegap开发环境
  9. Android源码树添加新的APP(含第三方so、jar)

随机推荐

  1. 去重和排序如何操作
  2. C#串口通信的实例教程
  3. 分享关于asp注册代码实例
  4. EasyLoader(简单加载)实例
  5. bootstrap-multiselect 多选实例代码
  6. 详解可选参数和命名参数实例
  7. 分享一个IoC入门教程实例
  8. [转]Composite Keys With WebApi OData
  9. 总结EF通用数据层封装类实例详解
  10. [转]Support Composite Key in ASP.NET W