Android Spinner:下拉列表控件

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

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

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

 
  1. android:id="@+id/button4"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. 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:

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

Android Spinner:下拉列表控件_第1张图片
图 1  Spinner 的应用界面


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

 
  1. android:layout_width="match_parent"
  2. android:layout_height="match_parent"
  3. android:orientation="vertical">
  4. android:id="@+id/textView1"
  5. android:layout_width="wrap_content"
  6. android:layout_height="wrap_content"
  7. android:text="textview"/>
  8. android:id="@+id/spinner1"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"/>

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 list = new ArrayList();
  18. private TextView textview;
  19. private Spinner spinnertext;
  20. private ArrayAdapter 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(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
  • 为下拉列表 Spinner 定义一个适配器 ArrayAdapter ,并与列表项内容相关联。
  • 使用 ArrayAdapter.setDropDownViewResource() 设置 Spinner 下拉列表在打开时的下拉菜单样式。
  • 使用 Spinner. setAdapter() 将适配器数据与 Spinner 关联起来。
  • 为 Spinner 添加事件监听器,进行事件处理。


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

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

 
  1. A型
  2. B型
  3. AB型
  4. O型
  5. 其他

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

 
  1. Spinner spinner=(Spinner)findViewById(R.id.spinner1);
  2. ArrayAdapter 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);

你可能感兴趣的:(android)