Android实战简易教程-第一枪(Spinner控件详解)

本教程简单实用,大家喜欢的话可以关注我,谢谢!

下拉列表框是一种常见的图形组件,与其他选择组件相比,可以有效的节省屏幕空间,在Android中可以使用android.widget.Spinner类来实现。

下拉列表框中的列表项有以下两种配置方式。

方式一、通过资源文件配置,例如定义一个values\city_data.xml的文件,在定义数据内容时需要使用<string-array>元素指定,定义内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="city_labels">
	    <item>北京 </item>
	    <item>上海 </item>
	    <item>广州 </item>
	    <item>深圳 </item>
	</string-array>
</resources>

方式二、通过android.widget.ArrayAdapter类读取资源文件或者指定具体设置的数据。

方式一

1.定义main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请选择您喜欢的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" ><!-- 载入数据 -->
    </Spinner>

</LinearLayout>

其实这是你就可以运行模拟器了:

这是可以看到数据已经加入到Spinner里面去了,我们发现这时的控件只是徒有其表,没有什么作用,要想实现监听怎么做呢?

我们改动一下main.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请选择您喜欢的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" > <!-- 载入数据 -->
    </Spinner>

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

然后编辑MainActivity文件:

package org.yayun.demo;

import org.yayun.demo.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;

public class MainActivity extends Activity {
	private Spinner spinner;
	private TextView textView;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 设置要使用的布局管理器
		spinner = (Spinner) findViewById(R.id.spinner);
		textView = (TextView) findViewById(R.id.text);
		spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				String[] cities = getResources().getStringArray(
						R.array.city_labels);//获取列表数据
				textView.setText("您喜欢的城市是:" + cities[position]);//显示

			}

			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub

			}
		});

	}
}

运行如下:

方式二

修改main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请选择您喜欢的城市:" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/city_labels" > <!-- 载入数据 -->
    </Spinner>

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Spinner
        android:id="@+id/spinnerCountry"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" > <!-- 动态载入数据 -->
    </Spinner>

</LinearLayout>

修改MainActivity程序:

package org.yayun.demo;

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;
import android.widget.Toast;

public class MainActivity extends Activity {
	private Spinner spinner, spinnerCountry;
	private TextView textView;
	private List<CharSequence> data = null;
	private ArrayAdapter<CharSequence> adapter;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState); // 生命周期方法
		super.setContentView(R.layout.main); // 设置要使用的布局管理器
		spinner = (Spinner) findViewById(R.id.spinner);
		textView = (TextView) findViewById(R.id.text);
		spinnerCountry = (Spinner) findViewById(R.id.spinnerCountry);

		spinnerCountry.setPrompt("选择国籍:");// 在列表中显示
		data = new ArrayList<CharSequence>();
		data.add("中國");
		data.add("美國");
		data.add("日本");
		adapter = new ArrayAdapter<CharSequence>(this,
				android.R.layout.simple_spinner_dropdown_item, this.data);//定义下拉列表
		spinnerCountry.setAdapter(adapter);
		spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				String[] cities = getResources().getStringArray(
						R.array.city_labels);// 获取列表数据
				textView.setText("您喜欢的城市是:" + cities[position]);// 显示

			}

			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub

			}
		});
		spinnerCountry.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				String[] countries = data.toArray(new String[data.size()]);// 获取列表数据
				Toast.makeText(MainActivity.this, "您的国籍是:"+countries[position], Toast.LENGTH_SHORT).show();

			}

			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub

			}
		});

	}
}

运行实例如下:

总结:

1.定义数据内容时需要使用<string-array>元素指定;

2.android:entries="@array/city_labels"载入文本资源;

3.String[] cities = getResources().getStringArray(R.array.city_labels);//获取资源数据的方法

4.String 和 CharSequence 关系

String 继承于CharSequence,也就是说String也是CharSequence类型。

CharSequence是一个接口,它只包括length(), charAt(int index), subSequence(int start, int end)这几个API接口。除了String实现了CharSequence之外,StringBuffer和StringBuilder也实现了CharSequence接口。

需要说明的是,CharSequence就是字符序列,String, StringBuilder和StringBuffer本质上都是通过字符数组实现的!

5.提示信息的设置:spinnerCountry.setPrompt("选择国籍:");// 在列表中显示

6.此外可以用adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//来设置显示风格

时间: 2024-11-09 00:08:25

Android实战简易教程-第一枪(Spinner控件详解)的相关文章

Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)

我们知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来展示它的控件大小相近,这样可以兼顾显示效果和内存占用. BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds .SDK中对这个成员的说明是这样的: If set to true, the decoder will return null (no bitm

Android Spinner控件详解

Spinner 类图 android.widget 类 Spinner java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<SpinnerAdapter> android.widget.AbsSpinner android.widget.Spinner Spinner 意指下拉列表组件. 以下为android官网文档内容. 布局文件中加入Spinner元素标签 <Spin

Android实战简易教程-第四十一枪(显示倒计时的Button-适用于获取验证码)

近期在做获取验证码的功能.考虑到优良的用户体验,决定制作一个拥有倒计时提示的Button按钮,在网上查了一些资料,非常是简单的就能实现.我写了一个小Demo,大家能够应用到自己的项目中. 一.代码 1.activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/to

Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)

前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容易,特写下此篇文章.学习就是要有发散思维,要举一反三,大家也可以根据我的实例进行改编,添加和删除一些功能,这样可以提高你对知识的认知!下面我们看一下代码: 1.main.xml: <?xml version="1.0" encoding="utf-8"?>

Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图: 二.主要代码 SMSSendForRegisterActivity.java:(获取验证码页) package com.qiandaobao.activity; import java.util.regex.Mat

Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传.这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音. 一.配置bmob 配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下: 然后配置权限: <uses-permission android:name="andr

Android实战简易教程-第四十枪(窃听风云之短信监听)

近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台服务,将监听到的短信自己主动上传到bmob数据库中. 一.代码实现: 1.首先实现javabean对象. package com.example.messagecut; import cn.bmob.v3.BmobObject; public class MsgContent extends Bmo

Android实战简易教程-第五十四枪(通过实现OnScrollListener接口实现下拉刷新功能)

上一篇文章Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)讲述了如何实现上拉加载更多的功能,本篇,我们在上一篇的基础上实现下拉刷新功能.主要通过对滚动状态和手势监听实现这一功能,下面我们看一下代码: 1.header.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sch

Android基础入门教程——2.3.2 EditText(输入框)详解

Android基础入门教程--2.3.2 EditText(输入框)详解 标签(空格分隔): Android基础入门教程 本节引言: 上一节中我们学习了第一个 UI控件TextView(文本框),文中给出了很多实际开发中可能遇到的一些需求 的解决方法,应该会为你的开发带来便利,在本节中,我们来学习第二个很常用的控件EditText(输入框): 和TextView非常类似,最大的区别是:EditText可以接受用户输入!和前面一样,我们不一个个讲属性, 只讲实际应用,要扣属性可以自己查看API文档