spinner
微调框
微调框提供一种方法,让用户可以从值集中快速选择一个值。默认状态下,微调框显示其当前所选的值。 触摸微调框可显示下拉菜单,其中列有所有其他可用值,用户可从中选择一个新值。
您可以使用 Spinner
对象向您的布局中添加一个微调框。通常应在 XML 布局中使用 <Spinner>
元素来执行此操作。 例如:
<Spinner android:id="@+id/planets_spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" />
要使用选择列表填充微调框,还需要在 Activity
或 Fragment
源代码中指定 SpinnerAdapter
。
数据源必须是 SpinnerAdapter
来提供。
但是由于这些是其子类,所有他们肯定也是可以的
例如,如果预先确定了微调框的可用选择,则可通过字符串资源文件中定义的字符串数组来提供这些选择。
<?xml version="1.0" encoding="utf-8"?> <resources> <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>
对于上例所示数组,可在 Activity
或 Fragment
中使用以下代码,以使用 ArrayAdapter
实例为微调框提供该数组。
Spinner spinner = (Spinner) findViewById(R.id.spinner); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner spinner.setAdapter(adapter);
createFromResource()
方法允许从字符串数组创建 ArrayAdapter
。 此方法的第三个参数是布局资源,其定义所选选择如何显示在微调框控件中。simple_spinner_item
布局由平台提供,是默认布局,除非您想为微调框外观定义自己的布局,否则应使用此布局。
然后,应调用 setDropDownViewResource(int)
指定适配器应用于显示微调框选择列表的布局(simple_spinner_dropdown(下拉)_item
是平台定义的另一标准布局)。
调用 setAdapter()
以将适配器应用到 Spinner
。
响应用户选择
当用户从下拉菜单中选择一个项目时,Spinner
对象会收到一个 on-item-selected 事件。
要为微调框定义选择事件处理程序,请实现 AdapterView.OnItemSelectedListener
接口以及相应的 onItemSelected()
回调方法。例如,以下是 Activity
中的一个接口实现:
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. You can retrieve the selected item using // parent.getItemAtPosition(pos) } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback } }
AdapterView.OnItemSelectedListener
需要 onItemSelected()
和 onNothingSelected()
回调方法。
然后,您需要调用 setOnItemSelectedListener()
来指定接口实现:
Spinner spinner = (Spinner) findViewById(R.id.spinner); spinner.setOnItemSelectedListener(this);
如果您使用 Activity
或 Fragment
来实现 AdapterView.OnItemSelectedListener
接口(如上例),则可以传递 this
作为接口实例。
有趣的属性:
spinner 的下拉三角号的显示与不显示: spinner 的 background 设置为 "@null" 时,spinner 的三角号就可以消失了,默认有三角号
Spinner有两种显示形式,一种是下拉菜单,一种是弹出框,菜单显示形式是spinnerMode属性决定的:
android:spinnerMode="dropdown"
android:spinnerMode="dialog"
entries: 直接在xml布局文件中绑定数据源android:entries="@array/languages"
prompt:
在Spinner弹出选择对话框的时候对话框的标题android:prompt="@string/dialog_title