Spinner
Spinner是个窗口小部件,像一个下拉选择菜单。
本教程里,将创建一个Spinner小部件来显示一个行星列表。当选择了某一项,会弹出一个文本消息框显示选中的项。
- 创建工程:HelloSpinner.
- 打开
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来说,它是下拉选择框上的一个提示。 -
打开
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>
标签定义了TextView
和Spinner
都要用到的字符串资源。<string-array>
定义了一个字符串的列表,将显示在Spinner的下拉框里。
- 打开
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的下拉框里)。资源IDR.array.planets_array
用来引用在前面strings.xml里定义的字符串数组资源,android.R.layout.simple_spinner_item用来引用系统自定义的一个标准的Spinner外观。再调用setDropDownViewResource(int)
方法来定义Spinner下拉框里每一项的外观(simple_spinner_dropdown_item
是另一个系统自定义的标准外观)。 - 现在创建一个内嵌类来实现
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()
两个回调函数,前者处理下拉框里的一项被选中的情况,弹出一个文本框显示被选中的项;后者处理下拉框打开并关闭后什么也没选的情况,这时什么也没发生,所以什么也不做。 - 现在给Spinner设置上面实现的监听器。在onCreate()末尾添加下面的内容:
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
创建一个匿名的
MyOnItemSelectedListener
实例并设置为Spinner的监听器。 - 运行应用。
界面看起来应该像这样: