Android(安卓)Spinner
Android Spinner
在Android的UI开发中,Spinner(下拉列表)总是可以用到的
Spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择。Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装。
Spinner
下面介绍一下Spinner的常用XML属性,Android也为其属性提供了相应的getter
、setter
方法:
- 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接口设置数据;
更多相关文章
- APEX - Android(安卓)Q
- Android的Zipalign优化
- Android(安卓)Studio删除无用的资源文件
- Android学习笔记:框架模式
- Android(安卓)NDK开发之旅1--NDK介绍
- Android(安卓)Studio报错org.junit不存在问题
- Android仿微信实现下拉列表
- android中搭建phonegap开发环境
- Android源码树添加新的APP(含第三方so、jar)