Android 的下拉列表框使用

下拉列表框也是一种常用的组件,形状类似于html的select。功能的话和那个单选按钮有些类似。这次的话就使用这个下拉列表框做一个城市和区域联动的小例子,数据的话简单起见就弄成静态的。就不先扯淡了。

1.先来看下下拉列表框的标签

1
2
3
4
5
6
7
<Spinner
   android:id="@+id/city"
   android:prompt="@string/city_label"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:entries="@array/city_name"
   />

这里要注意的就是2处,prompt是列表框的提示如图所示,entries当然就是下拉的内容了,也就是下面显示的上海、南京、昆明

Android 的下拉列表框使用

 

2.下面就开始一步一步的写这个小例子了,首先写一下静态的数据。我打算把城市写在一个xml文件里。下面是我的xml文件这个文件就放在values文件夹下

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="city_name">
       <item>上海</item>
       <item>南京</item>
       <item>昆明</item>
    </string-array>
</resources>

为了让大家看的更清楚,我把strings.xml也贴出来了

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SpinnerActivity!</string>
    <string name="app_name">spinner</string>
    <string name="city_label">选择城市</string>
    <string name="area_label">选择城市</string>
</resources>

城市的下拉没问题了剩下的就是,区域的级联了,在这里区域就把他放在一个数组里。这里就要用到ArrayAdapter了,对应的事件就是下拉改变事件了 这个事件也有一个监听器叫做setOnItemSelectedListener。联动效果是怎么来的呢,其实很简单只需要城市下拉改变我们就把对应的区 域动态的添加到二级下拉就OK了。这个操作就需要ArrayAdapterd的支持了。下面先把ArrayAdapter和区域定义一下

1
2
3
4
//定义一个字符数组,用来填充区域
    private String[][] areaData=new String[][]{{"浦东新区","徐汇区","普陀区","杨浦区"},{"雨花台区","白下区"},{"西山区","北市区"}};
    //定义下拉列表适配器,用于填充内容
    private ArrayAdapter<CharSequence> adapterArea=null;

下面就是这个Adapter的用法了

1
2
3
4
5
//实例化列表项
                adapterArea=new ArrayAdapter<CharSequence>(SpinnerActivity.this,android.R.layout.simple_spinner_item,SpinnerActivity.this.areaData[position]);
                //设置列表显示风格
                adapterArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                area.setAdapter(adapterArea);

对于第一句,第一个参数就是上下文,第二个参数就是下拉框的显示风格,第三个就是我们要填到下拉的数据了

第二句就是设置下拉框内容的风格了,不写的话显示的是这个样子

Android 的下拉列表框使用

写了的话是这个样子

Android 的下拉列表框使用

说了这么多我就把全部的代码贴出来了,里面也夹杂着一个图片的长按事件这个操作可以切换手机桌面,换桌面的时候不要忘了授权

1
<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>

下面是java代码

1
2
3
4
5
6
7
8
9
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package org.lxh.spinner;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;
public class SpinnerActivity extends Activity {
    private ImageView image=null;
    private Spinner city=null;
    private Spinner area=null;
    //定义一个字符数组,用来填充区域
    private String[][] areaData=new String[][]{{"浦东新区","徐汇区","普陀区","杨浦区"},{"雨花台区","白下区"},{"西山区","北市区"}};
    //定义下拉列表适配器,用于填充内容
    private ArrayAdapter<CharSequence> adapterArea=null;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        city=(Spinner)this.findViewById(R.id.city);
        area=(Spinner)this.findViewById(R.id.area);
        image=(ImageView)this.findViewById(R.id.wall);
        image.setOnLongClickListener(new View.OnLongClickListener() {
            
            public boolean onLongClick(View v) {
                //设置桌面之前要先清除单前的桌面
                try {
                    SpinnerActivity.this.clearWallpaper();
                    SpinnerActivity.this.setWallpaper(image.getResources().openRawResource(R.drawable.fengj));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return true;
            }
        });
        area.setOnItemSelectedListener(new OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(SpinnerActivity.this, parent.getItemAtPosition(position).toString(), 1).show();
                
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
                
            }
            
        });
        city.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                //实例化列表项
                adapterArea=new ArrayAdapter<CharSequence>(SpinnerActivity.this,android.R.layout.simple_spinner_item,SpinnerActivity.this.areaData[position]);
                //设置列表显示风格
                adapterArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                area.setAdapter(adapterArea);
                
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                
                
            }
        });
    }
}

下面补上main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Spinner
    android:id="@+id/city"
    android:prompt="@string/city_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:entries="@array/city_name"
    />
    <Spinner
    android:id="@+id/area"
    android:prompt="@string/area_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   
    />
    <ImageView
    android:id="@+id/wall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/fengj"
    />
</LinearLayout>

来自:http://blog.csdn.net/chenwill3/article/details/8249104

标签