ǰλã >> Android >> Android程序的基?件使用之下拉列表Spinner
  ϸ

Android程序的基?件使用之下拉列表Spinner

ȶȣ356   ʱ䣺2016-04-28 01:39:48.0
Android程序的基?件使用之7下拉列表Spinner

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

7下拉列表Spinner

掌握下拉列表Spinner的使?

?通过程序配置下拉列表Spinner显示内??/span>

?通过配置文件配置下拉列表Spinner显示内??/span>

 

通过?序就应??发现,下拉列?/span>Spinner的核心问题就?于下拉数?容的显示上??/span>

内??/span>

下拉列表框也?种常见的图形组件,它?为用户提供列表的选则方式,与复??或单选钮相比?节省手机的屏幕空间,?/span>Android?以使?/span>Android.widget.Spinner类实现,此类定义如下?/span>

 

java.lang.Object

   ?/span>       android.view.View

         ?/span>       android.view.ViewGroup

               ?/span>       android.widget.AdapterView<T extends android.widget.Adapter>

                     ?/span>       android.widget.AbsSpinner

                           ?/span>       android.widget.Spinner

由于spinner的核心问题在于内容的设置上,?以所讲解的操作方法也?设置内?有关?/span>

 

?/span>spinner类中?/span>setAdapter()方法,表示的???拉列表??显示内??/span>

SpinnerAdapter的功能就???配?会将??要的数据进?包?并放?/span>Spinner之中?/span>

既然现在对于Spinner的核心问题在于内容的配置上,?以这里面就需要?过以下的方式??容??/span>

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

方式?:直接?过资源文件配置?/span>

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

配置Spinner?/span>

<?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文件?/span>之中定义若干?源文件,例?,以上?果?定义??示城市信?下拉选项,就?定义??/span>city_data.xml定义?/span>

范例:定义文?/span>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>节点?/span>

<Spinner

            android:id="@+id/mycity"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:entries="@array/city_labels">  配置?有下拉列表??显示内?,??内???过city_data.xml文件之中加载过来的??/span>

 

    </Spinner>

 

 

范例:配?拉列表??prompt提示信息

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

<resources>

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

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

</resources>

如果要想使用此信?就继??/span><Spinner>属???/span>

<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>

 

此时就已经出现了提示的操作信???/span>

方式二:通过android.widget.ArrayAdapter?/span>

ArrayAdapter类的功能:有两个主?功能:?取资源文件中定义的列表项或?是通过List集合设置列表项,此类定义了?下几?用方法??/span>

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

范例:定义一?示?色的下拉?/span>color_data.xml

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

<resources>

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

        <item>红色</item>

        <item>绿色</item>

        <item>蓝色</item>

    </string-array>

</resources>

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

<TextView

            android:id="@+id/info_color"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="请?择您喜欢的颜色?/span>"

            />

    <Spinner

            android:id="@+id/mycolor"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

           >

 

    </Spinner>

现在?/span>spinner的配?件里?不在加入任何的配???定义了一?的下拉列表?。?在随后?/span>activity程序之中,?动?的进?配置?/span>

在封装之前肯定?使用ArrayAdapter

方法?/span>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;  //表示要?取的颜色列表?/span>

    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("请?择您喜欢的颜色?/span>");

        this.adapterColor = ArrayAdapter.createFromResource(this,

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

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

 

    }

}

 

 

?作与之前直接配置没有任何的区?效果?样的,只不过代码稍微多了?点??/span>

但是现在感?这个的显示很难看,有没有稍微好看?点的?/span>

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;  //表示要?取的颜色列表?/span>

    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("请?择您喜欢的颜色?/span>");

        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的另外一种形式??/span>

<TextView

            android:id="@+id/info_edu"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="请?择您的学历?/span>"

            />

    <Spinner

            android:id="@+id/myedu"

 

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            >

 

    </Spinner>

此时也配????/span>Spinner,?过这?候不再需要任何的资源文件了,都是通过程序代码生成的列表内容??/span>

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;  //表示要?取的颜色列表?/span>

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

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

    private ArrayAdapter<CharSequence> adapterEdu = null ;  //?有的数据??符串

    private List<CharSequence> dataEdu = null ; //定义??合数?/span>

    @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("请?择您喜欢的颜色?/span>");

        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("研究?/span>");

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

 

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

        this.spiEdu.setPrompt("请?择您喜欢的学历?/span>");

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

                android.R.layout.simple_spinner_item,this.dataEdu) ;//准?好下拉列表?的内?/span>

        this.adapterEdu.

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

        this.spiEdu.setAdapter(this.adapterEdu);

    }

}

 

有一?认的Spinner的显示,以及打开之后的显示操作??/span>

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

如果有些时??动?的配置下拉内?的话,就必须理解以上的程序做法了?/span>

 

总结?/span>

使用spinner?完成下拉列?的显示功能;

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

提示:?果?于集合?架不熟悉的?者,?定?好好先?习一次,包括各个的核心接口和核心类的特点及使用??/span>