Android Spinner

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YLBF_DEV/article/details/49703529

Android Spinner

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

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

Spinner

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

  • 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的数据绑定

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

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

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

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

XML文件结构:

<?xml version="1.0" encoding="utf-8"?>
<resources>
     ……
    <string-array name="arrayname">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
    </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);

即可取得<string-array name="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<String> list = new ArrayList<String>();
    private ArrayAdapter<String> 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<String>(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接口设置数据;

展开阅读全文

没有更多推荐了,返回首页