跳至主要內容

Spinner

鸭梨大约 1 分钟

Spinner

微调框(Spinner),也可以称为下拉列表,或者下拉菜单,轻触后列有所有其他可用值,用户可从中选择一个新值。[1]

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

详细的使用方式见官方文档。

使用指南:

1. 填充值

val spinner: Spinner = findViewById(R.id.spinner)
// 创建数组适配器 ArrayAdapter 并指定默认布局
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // 指定选择时的布局
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    // 将适配器应用到 spinner
    spinner.adapter = adapter
}

2. 使用监听器

在初始化时指定监听器:

val spinner: Spinner = findViewById(R.id.spinner)
spinner.onItemSelectedListener = this

然后继承事件监听器即可:

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // ...
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // ...
    }
}

4. 在 Activity 中使用

使用 R.array.array_list 指定选项:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="array_list">
        <item>项目 1</item>
        <item>项目 2</item>
        <item>项目 3</item>
    </string-array>
</resources>

onCreate 中指定:

val spinner: Spinner = findViewById(R.id.spinner)
ArrayAdapter.createFromResource(
    this,
    R.array.array_list,
    android.R.layout.simple_spinner_item
).also { adapter ->
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = adapter
}
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener {
    override fun onItemSelected(
        parent: AdapterView<*>,
        view: View?,
        position: Int,
        id: Long
    ) {
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
    }
}

5. 在 Fragment 中使用

使用 R.array.array_list 指定选项,在 onCreateView 中指定:

val spinner: Spinner = binding.spinnerName
this.context?.let {
    ArrayAdapter.createFromResource(
        it,
        R.array.array_list,
        android.R.layout.simple_spinner_item
    ).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
    }
}
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener {
    override fun onItemSelected(
        parent: AdapterView<*>,
        view: View?,
        position: Int,
        id: Long
    ) {
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
    }
}

  1. 微调框,Android 官方文档,https://developer.android.google.cn/guide/topics/ui/controls/spinner?hl=zh-cnopen in new window ↩︎