手记

Android零基础入门第46节:下拉框Spinner

上一期学习了GridView的使用,你已经掌握了吗?本期一起来学习Spinner的使用。

                                              

一、认识Spinner

    Spinner其实就是一个列表选择框。不过Android的列表选择框并不需要显示下拉列表,而是相当于弹出一个菜单供用户选择。

    Spinner 与 Gallery 都继承了AbsSpinner,AbsSpinner 继承了AdapterView,因此它也表现出AdapterView的特征:只要为AdapterView提供Adapter即可。

    Spinner支持的常用XML属性及相关方法如下表所示。

如果开发者使用Spinner时己经可以确定列表选择框里的列表项,则完全不需要编写代码,只要为Spinner指定android:entries属性即可让Spinner正常工作;如果程序需要在运行时动态 地决定Spinner的列表项,或者程序需要对Spinner的列表项进行定制,则可使用Adapter为 Spinner提供列表项。

二、Spinner示例

    接下来通过一个简单的示例程序来学习Spinner的使用方法。

    继续使用WidgetSample工程的listviewsample模块,在app/main/res/layout/目录下创建spinner_layout.xml文件,在其中填充如下代码片段:

[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<?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="match_parent"

              android:orientation="vertical"

              android:padding="5dp" >

 

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="选择专业方向"

        android:textColor="#44BDED"

        android:textSize="18sp" />

 

    <Spinner

        android:id="@+id/spin_one"

        android:layout_width="100dp"

        android:layout_height="64dp"

        android:entries="@array/professionals"

        android:spinnerMode="dialog" />

 

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginTop="10dp"

        android:text="选择教科书"

        android:textColor="#F5684A"

        android:textSize="18sp" />

 

    <Spinner

        android:id="@+id/spin_two"

        android:layout_width="wrap_content"

        android:layout_height="64dp" />

</LinearLayout>

    在res/values/目录下新建arrays.xml文件,定义professionals数组资源,如下:

[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

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

<resources>

    <string-array name="professionals">

        <item>Android</item>

        <item>Java</item>

        <item>Python</item>

        <item>PHP</item>

        <item>.Net</item>

        <item>C++</item>

        <item>C</item>

    </string-array>

</resources>

    接下来为Spinner提供Adapter。新建SpinnerActivity.java文件,加载上面新建的布局文件,具体代码如下:

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package com.jinyu.cqkxzsxy.android.listviewsample;

 

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.Toast;

 

public class SpinnerActivity   extends AppCompatActivity

        implements AdapterView.OnItemSelectedListener {

    private Spinner mProSpinner = null;

    private Spinner mBookSpinner = null;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.spinner_layout);

 

        //   获取界面布局文件中的Spinner组件

        mProSpinner   = (Spinner) findViewById(R.id.spin_one);

        mBookSpinner   = (Spinner) findViewById(R.id.spin_two);

 

        String[]   arr = { "初识Android开发", "Android初识开发", "Android中级开发",

                "Android高级开发", "Android开发进阶"};

        //   创建ArrayAdapter对象

        ArrayAdapter<string>   adapter = new ArrayAdapter<string>(this,

                android.R.layout.simple_list_item_1,   arr);

        //   为Spinner设置Adapter

        mBookSpinner.setAdapter(adapter);

 

        //   为Spinner设置选中事件监听器

        mProSpinner.setOnItemSelectedListener(this);

        mBookSpinner.setOnItemSelectedListener(this);

    }

 

    @Override

    public void onItemSelected(AdapterView<!--?--> parent, View view, int position, long id) {

        String   content = parent.getItemAtPosition(position).toString();

        switch (parent.getId()){

            case R.id.spin_one:

                Toast.makeText(SpinnerActivity.this,   "选择的专业是:" + content,

                        Toast.LENGTH_SHORT).show();

                break;

            case R.id.spin_two:

                Toast.makeText(SpinnerActivity.this,   "选择的教材是:" + content,

                        Toast.LENGTH_SHORT).show();

                break;

            default:

                break;

        }

    }

 

    @Override

    public void onNothingSelected(AdapterView<!--?--> adapterView) {

    }

}

</string></string>

    上面的程序比较简单,主要为Spinner 设置了选中设置监听器。

    修改程序启动的Activity,运行程序,可以看到下图所示界面效果。

    点击第一个Spinner ,弹出选择对话框,如下图所示。选择其中一项回到主界面,发现Spinner 的值会改变为所选择的内容。

    同理点击第二个Spinner ,打开下拉列表选项框,如下图所示。

    Gallery与Spinner组件有共同的父类:AbsSpinner,表明Gallery和Spinner都是一个列表选择框。它们之间的区别在于,Spinner显示的是一个垂直的列表选择框,而Gallery显示的是一个水平的列表选择框。 Gallery与Spinner还有一个区别:Spinner的作用是供用户选择,而Gallery则允许用户通过拖动来查看上一个、下一个列表项。

    Gallery本身的用法非常简单——基本上与Spinner的用法相似,只要为它提供一个内容 Adapter即可,该Adapter的getView()方法所返回的View将作为Gallery列表的列表项。如果程序需要监控到Gallery选择项的改变,通过为Gallery添加OnltemSelectedListener监听器即可实现。

    Android已经不再推荐使用Gallery组件,而是推荐使用其他水平滚动组件,如HorizontalScrollView和ViewPager来代替Gallery组件,所以此处不做过多讲解。

    今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

原文链接:http://www.apkbus.com/blog-205190-68754.html

0人推荐
随时随地看视频
慕课网APP