[译文]Spinner - Android SDK Tutorials系列

Spinner

Spinner是个窗口小部件,像一个下拉选择菜单。

本教程里,将创建一个Spinner小部件来显示一个行星列表。当选择了某一项,会弹出一个文本消息框显示选中的项。

  1. 创建工程:HelloSpinner.
  2. 打开res/layout/main.xml并修改如下:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:padding="10dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:text="@string/planet_prompt"
        />
        <Spinner 
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:prompt="@string/planet_prompt"
        />
    </LinearLayout>
    TextView的android:text属性和Spinner的android:prompt属性引用了相同的字符串资源,对于TextView来说,它是个标题;而对Spinner来说,它是下拉选择框上的一个提示。
  3. 打开res/values/ 下面的strings.xml文件,在里面插入以下内容(在<resources>和</resources>之间):
        <string name="planet_prompt">Choose a planet</string>
        <string-array name="planets_array">
            <item>Mercury</item>
            <item>Venus</item>
            <item>Earth</item>
            <item>Mars</item>
            <item>Jupiter</item>
            <item>Saturn</item>
            <item>Uranus</item>
            <item>Neptune</item>
        </string-array>

    <string>

    标签定义了TextViewSpinner 都要用到的字符串资源。<string-array>定义了一个字符串的列表,将显示在Spinner的下拉框里。
  4. 打开HelloSpinner.java 并修改onCreate()方法如下:
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.planets_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
    在加载了main.xml布局文件之后,通过findViewById(int)方法获得了对Spinner的引用。再通过createFromResource() 方法创建一个ArrayAdpater,用来将字符串数组资源绑定到Spinner上(这就是为什么字符串数组的内容会显示在Spinner的下拉框里)。资源ID R.array.planets_array 用来引用在前面strings.xml里定义的字符串数组资源,android.R.layout.simple_spinner_item用来引用系统自定义的一个标准的Spinner外观。再调用setDropDownViewResource(int) 方法来定义Spinner下拉框里每一项的外观(simple_spinner_dropdown_item 是另一个系统自定义的标准外观)。
  5. 现在创建一个内嵌类来实现AdapterView.OnItemSelectedListener监听器,提供一个回调函数来处理Spinner的选择事件。这个类内容如下:
    public class MyOnItemSelectedListener implements OnItemSelectedListener {
    
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
          Toast.makeText(parent.getContext(), "The planet is " +
              parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }
    
        public void onNothingSelected(AdapterView parent) {
          // Do nothing.
        }
    }

    AdapterView.OnItemSelectedListener

    监听器需要实现onItemSelected()onNothingSelected() 两个回调函数,前者处理下拉框里的一项被选中的情况,弹出一个文本框显示被选中的项;后者处理下拉框打开并关闭后什么也没选的情况,这时什么也没发生,所以什么也不做。
  6. 现在给Spinner设置上面实现的监听器。在onCreate()末尾添加下面的内容:
    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
    创建一个匿名的MyOnItemSelectedListener 实例并设置为Spinner的监听器。
  7. 运行应用。

界面看起来应该像这样:

posted on 2011-12-08 12:29  OnionD  阅读(231)  评论(0编辑  收藏  举报

导航