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

                            android.widget.AbsSpinner

                                  android.widget.Spinner

由于spinner的核心问题在于内容的设置上,所以所讲解的操作方法也是与设置内容有关。

 

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

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

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

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

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

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

配置Spinner

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

              android:orientation="vertical"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent"

        >

   

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="Hello World, MySpinnerDemo"

            />

   

            android:id="@+id/mycity"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content">

 

   

 

 

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

范例:定义文件city_data.xml

   

        北京

        上海

        南京

   

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

            android:id="@+id/mycity"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

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

 

   

 

 

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

    下拉列表

    请选择您喜欢的城市:

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

            android:id="@+id/mycity"

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

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:entries="@array/city_labels">

 

   

 

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

方式二:通过android.widget.ArrayAdapter

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

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

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

    表示颜色集合的标签

        红色

        绿色

        蓝色

   

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

            android:id="@+id/info_color"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

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

            />

   

            android:id="@+id/mycolor"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

           >

 

   

现在的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 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 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的另外一种形式。

            android:id="@+id/info_edu"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

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

            />

   

            android:id="@+id/myedu"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            >

 

   

此时也配置了一个新的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 adapterColor = null ; //所有的数据类型都是String

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

    private List 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();

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

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

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

 

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

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

        this.adapterEdu = new ArrayAdapter(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基础)