Spinner是一种类似于下拉列表的widget。
在这个教程中,你将创建一个简单的用于展示星球列表的spinner组件。当选择列表中的一项时,将会弹出一个表示所选项的toast信息。下面是具体步骤:
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 属性都引用了相同的字符串资源。这个字符串是被用来做 spinner 的标题的。当应用于 Spinner 的时候,这个字符串文本将出现在现则列表的的最上部。
3,在res/values目录下创建一个stings.xml文件,并按如下方式编辑:
<?xml version="1.0" encoding="utf-8"?> <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> </resources>
<string> 源于定义了前面 TextView 和 Spinner 都引用的标题字符串。 <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 文件作为 content view 之后,又通过 findViewById(int) 找到 Spinner 组件。然后 createFromResource() 方法创建了一个新的 ArrayAdapter ,这个 ArrayAdapter 将用于初始 Spinner 列表的字符串数组中的每一个 item 绑定上。 R.array.planets_array ID 引用了在上面定义的 string_array ,而 android.R.layout.simple_spinner_item 这个 ID 则引用了由系统定义的一个标准 spinner 样式( appearance )。然后调用 setDropDownViewResource(int) 来定义当 spinner 被打开的时候每一个 item 的 appearance ( simple_spinner_dropdown_item 是系统定义另一个标准布局)。最后通过调用 setAdapter(T) , ArrayAdapter 和它所有的 item 就关联在一起了。
5,通过实现AdapterView.OnItemSelectedListener创建一个内部类。当Spinner中的item被选择的时候这个函数将会提供一个回调方法。下面就是这个内部类:
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.OnItemSelectedListerer 需要 onItemSelected() 和 onNothingSelected() 回调方法。前面那个回调方法将在 AdapterView 中的 item 被选择的时候调用,这时,一个 Toast 信息将会被弹出,后面的回调方法会在 when a selection disappears from the AdapterView 时被调用,这个例子中不考虑。
6,然后将这个MyOnItemSelectedListener应用到Spinner,方法是在onCreate()方法中添加如下代码:
spinner.setOnItemSelectedListerner(new MyOnItemSelectedListener() );这样就创建了一个 MyOnItemSelectedListener 匿名内部类,并被设为 Spinner 的监听器。
7,运行程序。得到如下结果: