`
h389301776
  • 浏览: 9397 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android程序的基本控件使用之7下拉列表Spinner

 
阅读更多

Android程序的基本控件使用之7下拉列表Spinner

7下拉列表Spinner

掌握下拉列表Spinner的使用;

可以通过程序配置下拉列表Spinner显示内容;

可以通过配置文件配置下拉列表Spinner显示内容。

 

通过本程序就应该可以发现,下拉列表Spinner的核心问题就是在于下拉数据内容的显示上。

内容:

下拉列表框也是一种常见的图形组件,它可以为用户提供列表的选则方式,与复选框或单选钮相比可以节省手机的屏幕空间,在Android中可以使用Android.widget.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的核心问题在于内容的设置上,所以所讲解的操作方法也是与设置内容有关。

 

spinner类中的setAdapter()方法,表示的是设置下拉列表框中的显示内容。

SpinnerAdapter的功能就是一个适配器,会将所需要的数据进行包装并放在Spinner之中。

既然现在对于Spinner的核心问题在于内容的配置上,所以这里面就需要通过以下的方式设置内容。

Android中,可以直接在main.xml文件中定义“<Spinner>”节点,但是在定义此元素的时候却不能直接设置其显示的列表项,关于下拉列表框中的列表项有以下两种方式进行配置:

方式一:直接通过资源文件配置;

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

配置Spinner

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

<LinearLayout

        xmlns:android="http://schemas.android.com/apk/res/android"

              android:orientation="vertical"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent"

        >

    <TextView

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="Hello World, MySpinnerDemo"

            />

    <Spinner

            android:id="@+id/mycity"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content">

 

    </Spinner>

</LinearLayout>

 

 

对于Spinner的内容可以直接在values文件夹之中定义若干个资源文件,例如,以上如果要定义一个表示城市信息的下拉选项,就可以定义一个city_data.xml定义。

范例:定义文件city_data.xml

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

<resources>

    <string-array name="city_labels">

        <item>北京</item>

        <item>上海</item>

        <item>南京</item>

    </string-array>

</resources>

此处就表示配置了一个下拉的选项,如果要想配置这个选项,则可以直接通过<Spinner>节点:

<Spinner

            android:id="@+id/mycity"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:entries="@array/city_labels">  配置所有下拉列表框中的显示内容,而此内容是通过city_data.xml文件之中加载过来的。

 

    </Spinner>

 

 

范例:配置下拉列表框中的prompt提示信息

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

<resources>

    <string name="app_name">下拉列表</string>

    <string name="city_prompt">请选择您喜欢的城市:</string>

</resources>

如果要想使用此信息,就继续修改<Spinner>属性。

<Spinner

            android:id="@+id/mycity"

            android:prompt="@string/city_prompt"  加入提示信息

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:entries="@array/city_labels">

 

    </Spinner>

 

此时就已经出现了提示的操作信息。

方式二:通过android.widget.ArrayAdapter

ArrayAdapter类的功能:有两个主要功能:读取资源文件中定义的列表项或者是通过List集合设置列表项,此类定义了如下几个常用方法。

即:如果要使用ArrayAdapter配置下拉列表框的内容,可以采用配置文件完成,为了演示以上两种实现形式,下面先采用配置文件读取的方式完成。

范例:定义一个表示颜色的下拉框color_data.xml

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

<resources>

    <string-array name="color_labels"> 表示颜色集合的标签

        <item>红色</item>

        <item>绿色</item>

        <item>蓝色</item>

    </string-array>

</resources>

这个配置文件将在ArrayAdapter类中进行读取,为了使用ArrayAdapter还需要定义一个Spinner:

<TextView

            android:id="@+id/info_color"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="请选择您喜欢的颜色:"

            />

    <Spinner

            android:id="@+id/mycolor"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

           >

 

    </Spinner>

现在的spinner的配置文件里面,不在加入任何的配置信息,只是定义了一个空的下拉列表框。而在随后的activity程序之中,要动态的进行配置。

在封装之前肯定要使用ArrayAdapter

方法:public static ArrayAdapter<CharSequence>  ceateFromResource (Context context,  int textArrayResId, int  textViewResId)

(上下文对象,文本的数组的资源ID,文本的显示风格)

package com.example.SpinnerProject;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

 

public class MySpinnerDemo extends Activity {

    private Spinner spiColor = null;  //表示要读取的颜色列表框

    private ArrayAdapter<CharSequence> adapterColor = null ; //所有的数据类型都是String

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        this.spiColor = (Spinner) super.findViewById(R.id.mycolor); //取得颜色的下拉列表框

        this.spiColor.setPrompt("请选择您喜欢的颜色:");

        this.adapterColor = ArrayAdapter.createFromResource(this,

                R.array.color_labels,android.R.layout.simple_spinner_item);//实例化了ArrayAdapter

        this.spiColor.setAdapter(this.adapterColor); //设置显示信息

 

    }

}

 

 

本操作与之前直接配置没有任何的区别,效果是一样的,只不过代码稍微多了一点。

但是现在感觉这个的显示很难看,有没有稍微好看一点的,

package com.example.SpinnerProject;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

 

public class MySpinnerDemo extends Activity {

    private Spinner spiColor = null;  //表示要读取的颜色列表框

    private ArrayAdapter<CharSequence> adapterColor = null ; //所有的数据类型都是String

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        this.spiColor = (Spinner) super.findViewById(R.id.mycolor); //取得颜色的下拉列表框

        this.spiColor.setPrompt("请选择您喜欢的颜色:");

        this.adapterColor = ArrayAdapter.createFromResource(this,

                R.array.color_labels,android.R.layout.simple_spinner_item);//实例化了ArrayAdapter

        this.adapterColor.

             setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //换个风格

        this.spiColor.setAdapter(this.adapterColor); //设置显示信息

 

    }

}

可是对于ArrayAdapter而言,除了读取资源文件之外,还可能需要通过程序动态生成,所以现在就可以使用ArrayAdapter的另外一种形式。

<TextView

            android:id="@+id/info_edu"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="请选择您的学历:"

            />

    <Spinner

            android:id="@+id/myedu"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            >

 

    </Spinner>

此时也配置了一个新的Spinner,只不过这个时候不再需要任何的资源文件了,都是通过程序代码生成的列表内容。

package com.example.SpinnerProject;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

 

import java.util.ArrayList;

import java.util.List;

 

public class MySpinnerDemo extends Activity {

    private Spinner spiColor = null;  //表示要读取的颜色列表框

    private Spinner spiEdu = null ; //定义下拉列表

    private ArrayAdapter<CharSequence> adapterColor = null ; //所有的数据类型都是String

    private ArrayAdapter<CharSequence> adapterEdu = null ;  //所有的数据肯定是字符串

    private List<CharSequence> dataEdu = null ; //定义一个集合数据

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.main);

        this.spiColor = (Spinner) super.findViewById(R.id.mycolor); //取得颜色的下拉列表框

 

        this.spiColor.setPrompt("请选择您喜欢的颜色:");

        this.adapterColor = ArrayAdapter.createFromResource(this,

                R.array.color_labels,android.R.layout.simple_spinner_item);//实例化了ArrayAdapter

        this.adapterColor.

                setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //换个风格

        this.spiColor.setAdapter(this.adapterColor); //设置显示信息

 

        //配置List集合包装的下拉框内容

        this.dataEdu = new ArrayList<CharSequence>();

        this.dataEdu.add("大学");

        this.dataEdu.add("研究生");

        this.dataEdu.add("高中");

 

        this.spiEdu = (Spinner) super.findViewById(R.id.myedu) ; //取得下拉框

        this.spiEdu.setPrompt("请选择您喜欢的学历:");

        this.adapterEdu = new ArrayAdapter<CharSequence>(this,

                android.R.layout.simple_spinner_item,this.dataEdu) ;//准备好下拉列表框的内容

        this.adapterEdu.

                setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //换个风格

        this.spiEdu.setAdapter(this.adapterEdu);

    }

}

 

有一个默认的Spinner的显示,以及打开之后的显示操作。

这个下拉列表框的实现要远比之前讲解的各个组件困难许多,大部分的情况下都是利用资源文件的方式配置的。

如果有些时候要动态的配置下拉内容的话,就必须理解以上的程序做法了。

 

总结:

使用spinner可以完成下拉列框的显示功能;

下拉列框的显示内容可以通过配置文件或程序进行填充;

提示:如果对于集合框架不熟悉的读者,一定要好好先复习一次,包括各个的核心接口和核心类的特点及使用。

分享到:
评论

相关推荐

    Android Spinner控件下拉列表框的实现

    该源代码展示了如何去实现下拉列表框的效果,控件Spinner

    下拉列表spinner

    Spinner是android中提供的是可以弹出的下拉菜单控件,和Listview同样是一个AdapterView,本工程中包含三个下拉样式.

    Android 控件之下拉框—Spinner控件

    NULL 博文链接:https://yyhec2004.iteye.com/blog/970835

    Android控件Spinner实现下拉列表及监听功能

    元素实现一个下拉列表,在其中每个下拉列表项使用表示即可。这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner。 方法一: 以资源方式,静态展示 Spinner 选项: &lt;Spinner android...

    Android使用Spinner控件实现下拉列表的案例

    今天小编就为大家分享一篇关于Android使用Spinner控件实现下拉列表的案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    android studio 的下拉菜单Spinner使用详解

    不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择。 Spinner 与 Gallery 都继承了AbsSpinner,AbsSpinner 继承了AdapterView,因此它也表现出AdapterView的特征:只要为AdapterView...

    Android编程实现多列显示的下拉列表框Spinner功能示例

    本文实例讲述了Android编程实现多列显示的下拉列表框Spinner功能。分享给大家供大家参考,具体如下: 先上张效果图: 严格来说,这并不是一个下拉列表,只不过实现的效果很像是下拉列表 实现原理: 该下拉列表其实...

    Android UI控件之Spinner下拉列表效果

    主要为大家详细介绍了Android UI控件之Spinner下拉列表效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    下拉列表demo

    直接导入android studio,组合控件下拉列表菜单demo,spinner和PopupWindow简单实现下拉菜单。

    android控件之 spinner 实现省市二级联动 源码

    android的控件spinner,类似于一个下拉列表.如果您正在学习这个控件,需要实现基于这个控件的二级联动效果,不妨使用这个看看. 使用方法:用eclipse导入,假若报错,把平台改为android2.2,jdk1.6就可以了。

    Android基本控件(上)源码

    文本显示组件:TextView,按钮组件:Button,编辑框:EditText,单选钮,复选框,下拉列表框:Spinner,图片视图:ImageView,0图片按钮:ImageButton,时间选择器:TimePicker,日期选择器:DatePicker

    anroid开发教程之spinner下拉列表的使用示例

    首先在xml文件添加Spinner控件: 代码如下:&lt;Spinner android:id=”@+id/mySpinner” android:layout_height=”wrap_content” android:layout_width=”fill_parent” &gt; 在Activity中写: 代码如下:package ...

    Android中使用Spinner实现下拉列表功能

    Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装。 1,Demo展示图片 2,布局代码 //(layout)activity_main &lt;LinearLayout xmlns:android=...

    Spinner控件

    Android里面的下拉列表,讲述了自定义Adapter布局和系统提供的Adapter布局

    android应用开发之spinner控件的简单使用

    Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表。Spinner是位于 android.widget包下的,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表...

    Spinner控件修改

    Spinner 下拉列列表,当内容比较多时,一行显示不全,需要多行显示。试过自定义下拉Textview的各种多行显示属性设置,运行结果发现,在android 5.0 手机上 可以多行显示,如果放在6.0的手机,就会发现,事与愿违。...

    完美移植Android4.0中的Spinner

    完美移植android4.0系统中的spinner下拉列表控件,可用于低版本的系统中 100%相似

    Spinner控件。

    Android里面的下拉列表,讲述了自定义Adapter布局和系统提供的Adapter布局。。。。。。

Global site tag (gtag.js) - Google Analytics