微调器提供了从集合中快速选择单个值的便捷方式。在默认状态下,微调器会显示其当前选定的值。轻触微调器会显示一个菜单,其中列出了用户可以选定的所有其他值。
您可以使用 Spinner 对象将微调器添加到您的布局中,通常是在 XML 布局中使用 <Spinner> 元素来完成此操作。如下例所示
<Spinner android:id="@+id/planets_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
要用选项列表填充微调器,请在您的 Activity 或 Fragment 源代码中指定 SpinnerAdapter。
如果您使用 Material Design Components,则公开下拉菜单等同于 Spinner。
用用户选项填充微调器
您为微调器提供的选项可以来自任何来源,但必须通过 SpinnerAdapter 提供这些选项,例如,如果选项位于数组中,则可以使用 ArrayAdapter;如果选项来自数据库查询,则可以使用 CursorAdapter。
例如,如果微调器的可用选项是预先确定的,您可以使用字符串资源文件中定义的字符串数组来提供这些选项
<?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 实例为微调器提供该数组
Kotlin
val spinner: Spinner = findViewById(R.id.planets_spinner) // Create an ArrayAdapter using the string array and a default spinner layout. ArrayAdapter.createFromResource( this, R.array.planets_array, android.R.layout.simple_spinner_item ).also { adapter -> // 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.adapter = adapter }
Java
Spinner spinner = (Spinner) findViewById(R.id.planets_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 中接口的实现方式
Kotlin
class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener { ... override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) { // An item is selected. You can retrieve the selected item using // parent.getItemAtPosition(pos). } override fun onNothingSelected(parent: AdapterView<*>) { // Another interface callback. } }
Java
public class SpinnerActivity extends Activity implements OnItemSelectedListener { ... public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item is selected. You can retrieve the selected item using // parent.getItemAtPosition(pos). } public void onNothingSelected(AdapterView<?> parent) { // Another interface callback. } }
AdapterView.OnItemSelectedListener 接口需要 onItemSelected() 和 onNothingSelected() 回调方法。
通过调用 setOnItemSelectedListener() 指定接口实现
Kotlin
val spinner: Spinner = findViewById(R.id.planets_spinner) spinner.onItemSelectedListener = this
Java
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner); spinner.setOnItemSelectedListener(this);
如果您使用 Activity 或 Fragment 实现 AdapterView.OnItemSelectedListener 接口,如前例所示,您可以将 this 作为接口实例传递。