Android Spinner:下拉列表控件

Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的显示空间。

下面用一个简单的实例讲解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一个 Button,用以启动 SpinnerActivity。

在 main.xml 中添加代码如下:

 
  1. <Button
  2. android:id="@+id/button4"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text="SpinnerDemo"/>

单击 Button 并启动 SpinnerActivity 的代码如下

 
  1. Button spinnerbtn = (Button) this.findViewById(R.id.button4);
  2. spinnerbtn.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. Intent intent = new Intent(MainActivity.this, SpinnerActivity.class);
  6. startActivity(intent);
  7. }
  8. });

同时在 AndroidManifest.xml 文件中声明该 Activity:

<activity android:name=".SpinnerActivity "></activity>

SpinnerActivity 的运行效果如图 1 所示。

Spinner的应用界面
图 1  Spinner 的应用界面


SpinnerActivity 使用的布局文件为 spiner.xml,其代码如下:

 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:id="@+id/textView1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="textview"/>
  11. <Spinner
  12. android:id="@+id/spinner1"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"/>
  15. </LinearLayout>

SpinnerActivity.java 文件的代码如下:

 
  1. package introduction.android.widgetDemo;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.MotionEvent;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.ArrayAdapter;
  12. import android.widget.Spinner;
  13. import android.widget.TextView;
  14.  
  15. public class SpinnerActivity extends Activity {
  16.  
  17. private List<String> list = new ArrayList<String>();
  18. private TextView textview;
  19. private Spinner spinnertext;
  20. private ArrayAdapter<String> adapter;
  21.  
  22. public void onCreate(Bundle savedlnstanceState) {
  23. super.onCreate(savedlnstanceState);
  24. setContentView(R.layout.spiner);
  25. //第一步:定义下拉列表内容
  26. list.add("A型");
  27. list.add("B型");
  28. list.add("O型");
  29. list.add("AB型");
  30. list.add("其他");
  31. textview = (TextView) findViewByld(R.id.textViewl);
  32. spinnertext = (Spinner) findViewByld(R.id.spinnerl);
  33. //第二步:为下拉列表定义一个适配器
  34. adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
  35. //第三步:设置下拉列表下拉时的菜单样式
  36. adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  37. //第四步:将适配器添加到下拉列表上
  38. spinnertext.setAdapter(adapter);
  39. //第五步:添加监听器,为下拉列表设置事件的响应
  40. spinnertext.setOnltemSelectedListener(new Spinner.OnltemSelectedListener() {
  41. public void onltemSelected(AdapterView<?> argO, View argl, int arg2, long arg3) {
  42. // TODO Auto-generated method stub
  43. /* 将所选spinnertext的值带入myTextView中*/
  44. textview.setText("你的血型是:" + adapter.getItem(arg2));
  45. /* 将 spinnertext 显示^*/
  46. argO.setVisibility(View.VISIBLE);
  47. }
  48.  
  49. public void onNothingSelected(AdapterView<?> argO) {
  50. // TODO Auto-generated method stub
  51. textview.setText("NONE");
  52. argO.setVisibility(View.VISIBLE);
  53. }
  54. });
  55.  
  56. //将spinnertext添加到OnTouchListener对内容选项触屏事件处理
  57. spinnertext.setOnTouchListener(new Spinner.OnTouchListener() {
  58. @Override
  59. public boolean onTouch(View v, MotionEvent event) {
  60. // TODO Auto-generated method stub
  61. // 将mySpinner隐藏
  62. v.setVisibility(View.INVISIBLE);
  63. Log.i("spinner", "Spinner Touch事件被触发!");
  64. return false;
  65. }
  66. });
  67.  
  68. //焦点改变事件处理
  69. spinnertext.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
  70. public void onFocusChange(View v, boolean hasFocus) {
  71. // TODO Auto-generated method stub
  72. v.setVisibility(View.VISIBLE);
  73. Log.i("spinner", "Spinner FocusChange事件被触发!");
  74. }
  75. });
  76.  
  77. }
  78. }

SpinnerActivity 通过 5 个步骤将 Spinner 初始化并进行事件处理,分别为:

  • 定义下拉列表的列表项内容 List<String>。
  • 为下拉列表 Spinner 定义一个适配器 ArrayAdapter<String> ,并与列表项内容相关联。
  • 使用 ArrayAdapter.setDropDownViewResource() 设置 Spinner 下拉列表在打开时的下拉菜单样式。
  • 使用 Spinner. setAdapter() 将适配器数据与 Spinner 关联起来。
  • 为 Spinner 添加事件监听器,进行事件处理。


在本实例中,SpinnerActivity 在程序代码中动态建立了下拉列表每一项的内容。除此之外,还可以在 XML 文件中定义 Spinner 的下拉列表项,步骤如下。

1)在 res/values 文件夹下新建 cities.xml 文件夹:

 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="city">
  4. <item>A型</item>
  5. <item>B型</item>
  6. <item>AB型</item>
  7. <item>O型</item>
  8. <item>其他</item>
  9. </string-array>
  10. </resources>

2)在 SpinnerActivity.java 中初始化 Spinner:

 
  1. Spinner spinner=(Spinner)findViewById(R.id.spinner1);
  2. ArrayAdapter<CharSequence> adapter=ArrayAdapter.createF
  3. romResource(this, R.array.city,android.R.layout.simple_spinner_item);
  4. adapter.setDropDownViewResource
  5. (android.R.layout.simple_spinner_dropdown_item);
  6. spinner.setAdapter(adapter);
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值