在應用程式中新增旋轉圖示

輪轉選單可讓使用者從一組值中輕鬆選取某個值。在預設情況下,旋轉圖示會顯示目前選取的值。輕觸旋轉圖示會顯示選單,列出使用者可選取的所有其他值。

圖 1. 旋轉圖示中的選單,顯示可用的值。

您可以使用 Spinner 物件在版面配置中加入旋轉圖示,通常在 XML 版面配置中利用 <Spinner> 元素進行操作。如以下範例所示:

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

如要在輪轉選單中填入選項清單,請在 ActivityFragment 原始碼中指定 SpinnerAdapter

如果您使用 Material Design 元件,顯示的下拉式選單相當於 Spinner

在旋轉圖示中填入使用者選項

您為輪轉選單提供的選項可來自任何來源,但必須透過 ArrayAdapter 提供,例如如果選項可在陣列中採用,或是以 CursorAdapter 提供 (如果資料庫查詢有可用選項),您就必須透過 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>

建立這類陣列後,您可以在 ActivityFragment 中使用下列程式碼,透過 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 物件會收到項目選取事件。

如要定義輪轉選單的選取事件處理常式,請實作 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);

如果您使用 ActivityFragment 實作 AdapterView.OnItemSelectedListener 介面,如上述範例所示,您可以將 this 做為介面執行個體傳遞。