`
sarin
  • 浏览: 1756863 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
E3b14d1f-4cc5-37dd-b820-b6af951740bc
Spring数据库访问系列...
浏览量:173652
C2083dc5-6474-39e2-993e-263652d27795
Android学习笔记
浏览量:368115
5f40a095-b33c-3e8e-8891-606fcf3b8d27
iBatis开发详解
浏览量:189258
B272a31d-e7bd-3eff-8cc4-c0624ee75fee
Objective-C学习...
浏览量:99837
社区版块
存档分类
最新评论

Android学习笔记九:基本视图组件:Spinner

阅读更多
   接上文
    在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件,在Android中的对应实现就是Spinner。
    首先来看一下Spinner的文档:

java.lang.Object
   ↳ android.view.View
   ↳ android.view.ViewGroup
   ↳ android.widget.AdapterView<T extends android.widget.Adapter>
   ↳ android.widget.AbsSpinner
   ↳ android.widget.Spinner

    Spinner的继承结构比较复杂,在继承树中有AdapterView,这是比较重要的一项,因为我们就是通过Adapter来为Spinner设置下拉列表项的。
    Spinner的重点问题就是下拉列表项的配置,通过之前组件的了解,我们知道资源组件的配置有两种方式,一种是通过XML文件来配置,一种是通过程序来配置。而从Spinner的文档中,我们可以看到,对它的配置需要使用Adapter类的实现。
    下面我们就来看看Spinner的使用,在Eclipse中创建SpinnerDemo项目,编写代码:
    <TextView
        android:id="@+id/degreeLabel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请选择您的学历" />
    <Spinner
        android:id="@+id/degree"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    这里放置了一个空的Spinner,直接运行程序,我们看到如下效果:

    就是一个空的下拉框,什么都没有,下面我们开始向这个下拉框中设置列表项。首先我们使用XML资源文件的配置方式,在values目录下创建spinner_data.xml,并设置如下内容:
    <string-array name="degrees">
        <item>初中及以下</item>
        <item>高中</item>
        <item>大学</item>
        <item>研究生及以上</item>
    </string-array>

    不难理解<string-array>表示字符串的数组,就是可以定义多个字符串的项目,在其中,我们仍然使用<item>来定义每一项,设置好后,将其应用到Spinner中:
    <Spinner
        android:id="@+id/degree"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/degrees" />

    配置Spinner组件中的entries属性即可引用我们在spinner_data.xml中定义的degrees项目组了,不难想到,它已经被注册到R.java中了。运行程序,我们得到如下显示效果:

    这里可以看到,我们虽然设置了提示信息,但是点击下拉框后并没有出现Spinner的提示,而是直接显示出了我们设置的选项,这样的显示并不是很好看,我们希望在弹出的Spinner选择框上也给出提示,那么我们可以这么来设置:
    <Spinner
        android:id="@+id/degree"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/degrees"
        android:prompt="@string/degrees_prompt" />

    也就是在Spinner组件中加上prompt属性即可,注意这里不能直接使用文本了,而需要使用引用,那么我们在strings.xml中加入如下信息:
<string name="degrees_prompt">您的学历是:</string>

   我们再次运行程序,就可以看到如下的效果:

    这次再点击Spinner,弹出的下拉框中就有了提示的prompt,显示效果好了很多。
    下面我们看看如何通过程序来控制Spinner和列表项,之前说过要使用程序,就要用到Adapter类,这里我们使用实现类ArrayAdapter来进行操作。首先我们使用ArrayAdapter读取XML配置文件的方式来说明:
    <string-array name="cities">
        <item>北京</item>
        <item>上海</item>
        <item>大连</item>
    </string-array>

    我们在spinner_data.xml中再设置一组值来表示城市,有了列表项,我们还需要再创建一个Spinner,那么在main.xml中,再设置一个Spinner:
    <TextView
        android:id="@+id/cityLabel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请选择您所在的城市" />
    <Spinner
        android:id="@+id/city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    那么在Activity程序中,我们可以如下来编写代码:
package org.ourpioneer;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class SpinnerDemoActivity extends Activity {
	private Spinner city = null;// 要读取的下拉列表
	private ArrayAdapter<CharSequence> cities = null;// 要使用的Adapter
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		city = (Spinner) super.findViewById(R.id.city);// 获取下拉列表
		city.setPrompt("您所在的城市是:");// 设置Prompt
		cities = ArrayAdapter.createFromResource(this, R.array.cities,android.R.layout.simple_spinner_item);// 实例化ArrayAdapter
		city.setAdapter(cities);// 设置显示信息
	}
}

    根据代码中的注释,不难理解每行代码的意思,这和在XML中配置Spinner是类似的。要多说的一点就是这里我们为ArrayAdapter设置的泛型是CharSequence,而不是直接使用String,这是出于以后对StringBuffer的兼容,来看下CharSequence的文档:

    不难看出,String和StringBuffer都是CharSequence的子类,这里定义为CharSequence后直接使用字符串格式是没有问题的。
    下面直接运行程序,我们可以看到如下效果:

    此时列表项的显示和之前的不同,是因为我们在实例化ArrayAdapter时使用了android.R.layout.simple_spinner_item,也就是使用了简单的spinner项。
    可以通过如下的代码控制显示风格:
cities.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// 设置列表项的显示风格

    之后再次运行代码,就可以看到和之前一样的显示效果了。
    下面来看第二种ArrayAdapter的使用方式,就是在程序中动态生成结果来进行填充,我们修改上面的代码,最终为:
package org.ourpioneer;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;

public class SpinnerDemoActivity extends Activity {
	// 省略City部分Spinner和ArrayAdapter声明的代码
	private Spinner age = null;// 声明一个Spinner组件,表示年龄
	private ArrayAdapter<CharSequence> ages = null;// 声明一个ArrayAdapter来适配年龄
	private List<CharSequence> age_data = null;// 声明一个放置年龄数据的List
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		// 省略City部分的设置代码
		age = new Spinner(this);// 创建Spinner对象
		age.setPrompt("您的年龄段是:");// 设置Prompt
		age_data = Arrays.asList(new CharSequence[] { "10岁以下", "10-20岁",
				"20-30岁", "30-40岁", "40-50岁", "50-60岁", "60岁以上" });// 设置年龄段数组并最终转换为List类型
		ages = new ArrayAdapter<CharSequence>(this,
				android.R.layout.simple_spinner_item, age_data);// 实例化ArrayAdapter
	ages.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);// 设置列表项显示风格
		age.setAdapter(ages);// 设置显示信息
		LinearLayout layout = (LinearLayout) super.findViewById(R.id.layout);
		TextView ageLabel=new TextView(this);
		ageLabel.setText("请选择您的年龄段");
		layout.addView(ageLabel);
		layout.addView(age);
	}
}

    在此之前,不要忘了在main.xml中为我们的布局管理器加上ID属性,这样才能在程序中进行调用,运行程序,我们可以看到如下效果:

    点击即可弹出下拉列表框显示具体内容了。
    下面我们在Android设备上来运行Spinner的示例程序,运行环境为Motorola Defy+ 2.3.7 MIUI,所得到的具体显示效果为:

    可以看出,这和我们在模拟器中的显示效果略有不同,那么就是手机所刷ROM对我们组件显示风格的影响了,也就是说,在不同的ROM下,会有不同的显示效果。
    本部分代码请参考附件。
    接下文
  • 大小: 62.9 KB
  • 大小: 30.3 KB
  • 大小: 41.8 KB
  • 大小: 44.1 KB
  • 大小: 55.8 KB
  • 大小: 44 KB
  • 大小: 50.3 KB
  • 大小: 47.1 KB
6
0
分享到:
评论
2 楼 tomastong 2014-04-11  
楼主,为什么你的运行效果那么赞,用的是哪个版本的?
1 楼 qianguming 2013-09-29  
紧紧跟随9,不知道为什么我的那个promote不能显示??

相关推荐

    Android学习笔记(四)源码

    这份"Android学习笔记(四)源码"主要聚焦于ListView的内部工作原理及其源码解析。通过阅读CSDN博客文章《Android学习笔记(四)——ListView的源码》(链接:...

    android学习笔记

    ### Android学习笔记知识点详解 #### 一、Android简介与历史 - **定义**: Android是由Google公司主导开发的一款基于Linux内核的操作系统,主要用于移动设备,如智能手机和平板电脑。 - **发展历史**: Android项目...

    android开发笔记总结

    ### Android开发笔记总结 #### 学习基础 在深入探讨Android开发之前,我们先回顾...通过以上内容的学习,开发者可以更好地理解和应用Android中各种视图组件的功能与属性,从而构建出更加美观、实用的应用程序界面。

    Android开发笔记——UI基础编程

    Android系统提供了丰富的UI组件,如TextView、EditText、Button、ImageView、RadioButton、Checkbox、Spinner等,这些都是构建应用界面的基本元素。开发者需要理解每个组件的功能、属性以及如何在XML布局文件中使用...

    android开发笔记5

    "新版Android开发教程+笔记十--基础UI编程4.pdf"可能进一步深入UI编程,介绍更复杂的UI组件,如Spinner(下拉列表)、Adapter(数据适配器)以及ViewPager(页面滑动)。Adapter是将数据源与UI组件连接的关键,如...

    《Android应用开发揭秘》读书笔记

    《Android应用开发揭秘》读书笔记不仅是一份个人学习历程的记录,更是一部深入浅出的Android开发指南。本书籍及笔记覆盖了从基础知识到高级应用的广泛内容,为初学者和有经验的开发者提供了宝贵的资源。 ### ...

    刚开始学习android笔记,和一些控件的整理

    在开始学习Android开发时,首先要了解的是一个基本的Android应用是如何构建的。一个典型的Android应用由多个`Activity`组成,每个`Activity`代表了一个屏幕界面。下面是一些关于`Activity`的基本要点: 1. **创建一...

    Android开发实战经典----自己学习的笔记总结

    在Android开发中,基础知识至关重要,本笔记主要涵盖了从Java编程基础到Android UI组件的详细讲解。首先,开发者需要具备扎实的Java基础,包括面向对象的概念、MVC设计模式的应用,以及对HTML、JavaScript和XML的...

    android 入门笔记

    Android入门笔记 1. 开发环境配置 在开始Android开发之前,首先需要配置好开发环境。Eclipse是一款经典的集成开发环境(IDE),适用于Android开发。你可以从以下地址下载Eclipse: - Eclipse下载地址:此处应填写...

    android安卓笔记

    ### Android 安卓笔记知识点详解 #### Android—基础 ##### 基础—概念 - **控件类之父**:`View`是所有控件的基类,无论是简单的按钮还是复杂的列表视图,都是从这个类派生出来的。 - **基准线**:在英文书写中,...

    android 培训(二)

    在新版Android开发教程+笔记九中,我们详细讲解了如何创建和设计基本的用户界面元素,如按钮、文本框、布局等。Android提供了一套丰富的视图组件和布局管理器,如线性布局、相对布局、帧布局和网格布局,开发者可以...

    [指南]Android开辟实战经典----自己进修的笔记总结.doc

    除了基本的View组件,Android还提供了ViewGroup,这是布局容器,它允许开发者将多个View组合在一起,形成更复杂的用户界面。ViewGroup自身也是View的子类,因此同样具备事件处理能力。开发者可以通过调整ViewGroup的...

    Android-DrawBoardDemo一个画板的demo实现画线和清除基本操作

    在Android开发中,创建一个画板应用是相当常见的需求,比如儿童教育应用、手写笔记应用等。`DrawBoardDemo`就是一个很好的实例,它展示了如何实现在Android上进行绘图和清除基本操作。这个项目主要涉及到以下几个...

Global site tag (gtag.js) - Google Analytics