Trình đơn vòng quay (spinner) giúp bạn dễ dàng chọn một giá trị trong một nhóm. Ở trạng thái mặc định, vòng quay cho thấy giá trị đang được chọn. Khi nhấn vào vòng quay, một trình đơn sẽ cho thấy tất cả các giá trị khác mà người dùng có thể chọn.
![](https://developer.android.google.cn/static/images/ui/spinner.png?authuser=6&hl=vi)
Bạn có thể thêm một danh sách vào bố cục bằng đối tượng Spinner
. Bạn thường thực hiện việc này trong bố cục XML với phần tử <Spinner>
. Điều này được thể hiện trong ví dụ sau:
<Spinner android:id="@+id/planets_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
Để điền danh sách các lựa chọn vào trình đơn vòng quay, hãy chỉ định SpinnerAdapter
trong mã nguồn Activity
hoặc Fragment
.
Nếu bạn đang sử dụng Thành phần Material Design, trình đơn thả xuống hiển thị tương đương với Spinner
.
Điền các lựa chọn của người dùng vào danh sách màu sắc
Các lựa chọn mà bạn cung cấp cho trình đơn vòng quay có thể đến từ bất kỳ nguồn nào, nhưng bạn phải cung cấp các lựa chọn đó thông qua SpinnerAdapter
, chẳng hạn như ArrayAdapter
nếu các lựa chọn đó có trong một mảng hoặc CursorAdapter
nếu các lựa chọn đó có sẵn trong truy vấn cơ sở dữ liệu.
Ví dụ: nếu các lựa chọn có sẵn cho danh sách màu sắc được xác định trước, bạn có thể cung cấp cho các lựa chọn đó một mảng chuỗi được xác định trong tệp tài nguyên chuỗi:
<?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>
Với một mảng như thế này, bạn có thể sử dụng mã sau trong Activity
hoặc Fragment
để cung cấp danh sách màu sắc cho mảng bằng cách sử dụng một thực thể của 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);
Phương thức createFromResource()
cho phép bạn tạo ArrayAdapter
từ mảng chuỗi. Đối số thứ ba cho phương thức này là một tài nguyên bố cục xác định cách lựa chọn đã chọn xuất hiện trong bảng điều khiển danh sách. Nền tảng này cung cấp bố cục
simple_spinner_item
. Đây là bố cục mặc định trừ khi bạn muốn xác định bố cục riêng cho giao diện của danh sách màu sắc.
Gọi setDropDownViewResource(int)
để chỉ định bố cục mà trình chuyển đổi sử dụng để hiển thị danh sách các lựa chọn trong trình đơn vòng quay.
simple_spinner_dropdown_item
là một bố cục chuẩn khác do nền tảng xác định.
Gọi setAdapter()
để áp dụng trình chuyển đổi cho Spinner
.
Phản hồi lựa chọn của người dùng
Khi người dùng chọn một mục trên trình đơn của danh sách màu sắc, đối tượng Spinner
sẽ nhận được một sự kiện tại mục đã chọn.
Để xác định trình xử lý sự kiện lựa chọn cho một danh sách, hãy triển khai giao diện AdapterView.OnItemSelectedListener
và phương thức gọi lại onItemSelected()
tương ứng. Ví dụ: dưới đây là cách triển khai giao diện trong một 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. } }
Giao diện AdapterView.OnItemSelectedListener
yêu cầu phương thức gọi lại onItemSelected()
và onNothingSelected()
.
Chỉ định việc triển khai giao diện bằng cách gọi 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);
Nếu triển khai giao diện AdapterView.OnItemSelectedListener
bằng Activity
hoặc Fragment
, như trong ví dụ trước, bạn có thể truyền this
dưới dạng thực thể giao diện.