API Demos 2.3 学习笔记 (16)-- Views->Spinner

简介:

更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》


上一节我们讲到RadioGroup控件。大家试着想想,如果RadioGroup里面有很多选项,那是不是会占用大片区域呢?这种情况下,对于本来就不大的手机界面空间来说简直是一种浪费。这时,我们就要用到Spinner下拉列表控件了。
下面简单介绍怎么创建和使用一个Spinner控件。

首先,在layout布局文件文件中定义一个Spinner控件。

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:prompt="@string/spinner_1_color_prompt" />
注:
1、android:drawSelectorOnTop="true"
有关该属性的相关知识请参考:http://blog.csdn.net/jincf2011/article/details/6598689

2、android:prompt="@string/spinner_1_color_prompt" 
表示下拉列表控件Spinner上的标题文字。如下所示:“Choose a color”就是该属性定义的标题文字。


接着,定义Spinner控件的数据源数组。在value目录下创建一个arrays.xml文件。在里面定义一个数组,用作Spinner控件的数据源。格式如下:

    <!-- Used in View/Spinner1.java -->
    <string-array name="colors">
        <item>red</item>
        <item>orange</item>
        <item>yellow</item>
        <item>green</item>
        <item>blue</item>
        <item>violet</item>
    </string-array>

最后,在Spinner1.java文件中实例化Spinner控件。
        // 通过findViewById方法获得一个Spinner对象s1,下同
        Spinner s1 = (Spinner) findViewById(R.id.spinner1);
        
        //根据颜色数组R.array.colors创建一个数组适配器
        //第二个参数 R.array.colors 为数组适配器数据源
        //第三个参数 是下拉列表中每个数据所占据的 View 的样式 。这里采用系统默认样式 android.R.layout.simple_spinner_item 
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.colors, android.R.layout.simple_spinner_item);
        
        //设置适配器下拉样式,这里是系统默认样式 android.R.layout.simple_spinner_dropdown_item
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        //将 Spinner 控件绑定适配器 adapter
        s1.setAdapter(adapter);

这样,一个Spinner控件就成功创建好了。那么这个控件怎么用呢?和按钮等大多数控件一样,Spinner控件也是通过创建一个监听器来监听用户的动作的。当用户选择其中一个选项时,便会触发响应。
        //设置监听器。当用户选择其中一个选项时,触发响应。
        s1.setOnItemSelectedListener(
        		//选择其中一个选项时,触发该响应
        		//parent:装载数据的视图列表
        		//view:列表中当前选中的item视图
        		//position:选中的item在AdapterView中的索引
        		//id:选中的item视图控件的id值
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {
                        showToast("Spinner1: position=" + position + " id=" + id);
                    }

                    //什么选项都没选择时,触发该响应
                    public void onNothingSelected(AdapterView<?> parent) {
                        showToast("Spinner1: unselected");
                    }
                });


下面我们进行实例代码解析:
res-values-arrays.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <!-- Used in View/Spinner1.java -->
    <string-array name="colors">
        <item>red</item>
        <item>orange</item>
        <item>yellow</item>
        <item>green</item>
        <item>blue</item>
        <item>violet</item>
    </string-array>
    
    <!-- Used in View/Spinner1.java -->
    <string-array name="planets">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
        <item>Pluto</item>
    </string-array>
    
</resources>


res-layout-spinner_1.xml

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/spinner_1_color" />

    <!-- 一个Spinner对象 -->
    <!-- android:drawSelectorOnTop 具体参考:http://blog.csdn.net/jincf2011/article/details/6598689 -->
    <!-- android:prompt 下拉列表控件Spinner的标题文字 -->
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:prompt="@string/spinner_1_color_prompt" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/spinner_1_planet" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:prompt="@string/spinner_1_planet_prompt" />

</LinearLayout>


src-com.example.android.apis.view-Spinner1.java

package com.example.android.apis.view;

/**
 * 演示如何使用下拉列表控件Spinner
 */
import com.example.android.apis.R;

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


public class Spinner1 extends Activity {

    // 调用Toast控件来显示消息msg,用来提示用户
   void showToast(CharSequence msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spinner_1);

        // 通过findViewById方法获得一个Spinner对象s1,下同
        Spinner s1 = (Spinner) findViewById(R.id.spinner1);
        
        //根据颜色数组R.array.colors创建一个数组适配器
        //第二个参数 R.array.colors 为数组适配器数据源
        //第三个参数 是下拉列表中每个数据所占据的 View 的样式 。这里采用系统默认样式 android.R.layout.simple_spinner_item 
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.colors, android.R.layout.simple_spinner_item);
        
        //设置适配器下拉样式,这里是系统默认样式 android.R.layout.simple_spinner_dropdown_item
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        //将 Spinner 控件绑定适配器 adapter
        s1.setAdapter(adapter);
        
        //设置监听器。当用户选择其中一个选项时,触发响应。
        s1.setOnItemSelectedListener(
        		//选择其中一个选项时,触发该响应
        		//parent:装载数据的视图列表
        		//view:列表中当前选中的item视图
        		//position:选中的item在AdapterView中的索引
        		//id:选中的item视图控件的id值
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {
                        showToast("Spinner1: position=" + position + " id=" + id);
                    }

                    //什么选项都没选择时,触发该响应
                    public void onNothingSelected(AdapterView<?> parent) {
                        showToast("Spinner1: unselected");
                    }
                });

        // 通过findViewById方法获得一个Spinner对象s2
        Spinner s2 = (Spinner) findViewById(R.id.spinner2);
        adapter = ArrayAdapter.createFromResource(this, R.array.planets,
                android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s2.setAdapter(adapter);
        s2.setOnItemSelectedListener(
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {
                        showToast("Spinner2: position=" + position + " id=" + id);
                    }

                    public void onNothingSelected(AdapterView<?> parent) {
                        showToast("Spinner2: unselected");
                    }
                });
    }
}

预览效果;

          


相关文章
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
51 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
41 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
32 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结4
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结
43 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动3
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动3
47 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结2
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结2
40 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
34 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动2
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动2
41 0
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
41 0
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
|
8月前
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-学生列表api封装2
前端学习笔记202305学习笔记第二十二天-学生列表api封装2
32 1