Android 的下拉列表框使用

法一、

第一步,还是先新建一个工程

 

第二步。修改已经生成的res/layout/main.xml。整体替换为:

 

 

[c-sharp]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <LinearLayout    
  3.     android:id="@+id/widget28"    
  4.     android:layout_width="fill_parent"    
  5.     android:layout_height="fill_parent"    
  6.     android:orientation="vertical"    
  7.     xmlns:android="http://schemas.android.com/apk/res/android" >    
  8.     <TextView    
  9.         android:id="@+id/TextView_Show"    
  10.         android:layout_width="fill_parent"    
  11.         android:layout_height="wrap_content"    
  12.         android:text="你选择的是"    
  13.         android:textSize="25sp">    
  14.     </TextView>    
  15.     <Spinner    
  16.         android:id="@+id/spinner_City"    
  17.         android:layout_width="fill_parent"    
  18.         android:layout_height="wrap_content">    
  19.     </Spinner><!-- 定义一个下拉菜单-->    
  20. </LinearLayout>    

 

第三步。添加关键代码

 

[c-sharp]  view plain copy
  1. import java.util.ArrayList;     
  2. import java.util.List;     
  3. import android.app.Activity;     
  4. import android.os.Bundle;     
  5. import android.view.MotionEvent;     
  6. import android.view.View;     
  7. import android.widget.AdapterView;     
  8. import android.widget.ArrayAdapter;     
  9. import android.widget.Spinner;     
  10. import android.widget.TextView;     
  11.     
  12. public class spinner extends Activity {     
  13.     /** Called when the activity is first created. */    
  14.     private List<String> list = new ArrayList<String>();     
  15.     private TextView myTextView;     
  16.     private Spinner mySpinner;     
  17.     private ArrayAdapter<String> adapter;     
  18.   
  19.     @Override    
  20.     public void onCreate(Bundle savedInstanceState) {     
  21.         super.onCreate(savedInstanceState);     
  22.         setContentView(R.layout.main);     
  23.         //第一步:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项     
  24.         list.add("北京");     
  25.         list.add("上海");     
  26.         list.add("深圳");     
  27.         list.add("南京");     
  28.         list.add("重庆");     
  29.         myTextView = (TextView)findViewById(R.id.TextView_Show);     
  30.         mySpinner = (Spinner)findViewById(R.id.spinner_City);     
  31.         //第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。     
  32.         adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);     
  33.         //第三步:为适配器设置下拉列表下拉时的菜单样式。     
  34.         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);     
  35.         //第四步:将适配器添加到下拉列表上     
  36.         mySpinner.setAdapter(adapter);     
  37.         //第五步:为下拉列表设置各种事件的响应,这个事响应菜单被选中     
  38.         mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){     
  39.             @SuppressWarnings("unchecked")  
  40.             public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) {     
  41.                 // TODO Auto-generated method stub     
  42.                 /* 将所选mySpinner 的值带入myTextView 中*/    
  43.                 myTextView.setText("您选择的是:"+ adapter.getItem(arg2));     
  44.                 /* 将mySpinner 显示*/    
  45.                 arg0.setVisibility(View.VISIBLE);     
  46.             }     
  47.             @SuppressWarnings("unchecked")  
  48.             public void onNothingSelected(AdapterView arg0) {     
  49.                 // TODO Auto-generated method stub     
  50.                 myTextView.setText("NONE");     
  51.                 arg0.setVisibility(View.VISIBLE);     
  52.             }     
  53.         });     
  54.         /*下拉菜单弹出的内容选项触屏事件处理*/    
  55.         mySpinner.setOnTouchListener(new Spinner.OnTouchListener(){     
  56.             public boolean onTouch(View v, MotionEvent event) {     
  57.                 // TODO Auto-generated method stub     
  58.                 /* 将mySpinner 隐藏,不隐藏也可以,看自己爱好*/    
  59.                 v.setVisibility(View.INVISIBLE);     
  60.                 return false;     
  61.             }     
  62.         });     
  63.         /*下拉菜单弹出的内容选项焦点改变事件处理*/    
  64.         mySpinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener(){     
  65.         public void onFocusChange(View v, boolean hasFocus) {     
  66.         // TODO Auto-generated method stub     
  67.             v.setVisibility(View.VISIBLE);     
  68.         }     
  69.         });     
  70.     }     
  71. }  

 

 

小结:

 

第一步:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项   
第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。   
第三步:为适配器设置下拉列表下拉时的菜单样式。   
第四步:将适配器添加到下拉列表上   
第五步:为下拉列表设置各种事件的响应,这个事响应菜单被选中  


——————————————————————————————————————————————————————————————————



法二、

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

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

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

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

Android 的下拉列表框使用

 

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

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

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

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

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

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

下面就是这个Adapter的用法了

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

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

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

Android 的下拉列表框使用

写了的话是这个样子

Android 的下拉列表框使用

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

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

下面是java代码

01 package org.lxh.spinner;
02  
03 import java.io.IOException;
04  
05 import android.app.Activity;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.widget.AdapterView;
09 import android.widget.AdapterView.OnItemSelectedListener;
10 import android.widget.ArrayAdapter;
11 import android.widget.ImageView;
12 import android.widget.Spinner;
13 import android.widget.Toast;
14  
15 public class SpinnerActivity extends Activity {
16     private ImageView image=null;
17     private Spinner city=null;
18     private Spinner area=null;
19     //定义一个字符数组,用来填充区域
20     private String[][] areaData=new String[][]{{"浦东新区","徐汇区","普陀区","杨浦区"},{"雨花台区","白下区"},{"西山区","北市区"}};
21     //定义下拉列表适配器,用于填充内容
22     private ArrayAdapter<CharSequence> adapterArea=null;
23     public void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.main);
26         city=(Spinner)this.findViewById(R.id.city);
27         area=(Spinner)this.findViewById(R.id.area);
28         image=(ImageView)this.findViewById(R.id.wall);
29         image.setOnLongClickListener(new View.OnLongClickListener() {
30              
31             public boolean onLongClick(View v) {
32                 //设置桌面之前要先清除单前的桌面
33                 try {
34                     SpinnerActivity.this.clearWallpaper();
35                     SpinnerActivity.this.setWallpaper(image.getResources().openRawResource(R.drawable.fengj));
36                 } catch (IOException e) {
37                     // TODO Auto-generated catch block
38                     e.printStackTrace();
39                 }
40                 return true;
41             }
42         });
43         area.setOnItemSelectedListener(new OnItemSelectedListener(){
44  
45             @Override
46             public void onItemSelected(AdapterView<?> parent, View view,
47                     int position, long id) {
48                 Toast.makeText(SpinnerActivity.this, parent.getItemAtPosition(position).toString(), 1).show();
49                  
50             }
51  
52             @Override
53             public void onNothingSelected(AdapterView<?> parent) {
54                 // TODO Auto-generated method stub
55                  
56             }
57              
58         });
59         city.setOnItemSelectedListener(new OnItemSelectedListener() {
60  
61             public void onItemSelected(AdapterView<?> parent, View view,
62                     int position, long id) {
63                 //实例化列表项
64                 adapterArea=new ArrayAdapter<CharSequence>(SpinnerActivity.this,android.R.layout.simple_spinner_item,SpinnerActivity.this.areaData[position]);
65                 //设置列表显示风格
66                 adapterArea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
67                 area.setAdapter(adapterArea);
68                  
69             }
70  
71             @Override
72             public void onNothingSelected(AdapterView<?> parent) {
73                  
74                  
75             }
76         });
77     }
78 }

下面补上main.xml

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03     android:orientation="horizontal"
04     android:layout_width="fill_parent"
05     android:layout_height="fill_parent"
06     >
07     <Spinner
08     android:id="@+id/city"
09     android:prompt="@string/city_label"
10     android:layout_width="wrap_content"
11     android:layout_height="wrap_content"
12     android:entries="@array/city_name"
13     />
14     <Spinner
15     android:id="@+id/area"
16     android:prompt="@string/area_label"
17     android:layout_width="wrap_content"
18     android:layout_height="wrap_content"
19     
20     />
21     <ImageView
22     android:id="@+id/wall"
23     android:layout_width="wrap_content"
24     android:layout_height="wrap_content"
25     android:src="@drawable/fengj"
26     />
27 </LinearLayout>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值