Xamarin.Android Spinner

Spinner 是一個小工具,可顯示用於選取專案的下拉式清單。 本指南說明如何建立簡單的應用程式,以在Spinner中顯示選項清單,然後進行修改,以顯示與所選取相關聯的其他值。

基本微調器

在本教學課程的第一個部分中,您將建立簡單的微調器小工具,以顯示行星清單。 選取行星時,快顯通知訊息會顯示選取的專案:

Example screenshots of HelloSpinner app

啟動名為 HelloSpinner 的新專案。

開啟 Resources/Layout/Main.axml 並插入下列 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/planet_prompt"
    />
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/planet_prompt"
    />
</LinearLayout>

請注意, TextView屬性 android:textSpinner屬性 android:prompt 都會參考相同的字串資源。 此文字會作為小工具的標題。 套用至 Spinner時,標題文字會出現在選取小工具時出現的選取對話框中。

編輯 資源/值/Strings.xml 並修改檔案,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloSpinner</string>
  <string name="planet_prompt">Choose a planet</string>
  <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>

第二<string>個元素會在上述配置中定義 和 SpinnerTextView參考的標題字串。 元素 <string-array> 會定義字串清單,這些字串將會顯示為小工具中的 Spinner 清單。

現在開啟 MainActivity.cs 並新增下列 using 語句:

using System;

接下來,為 ) 方法插入下列程序代碼 OnCreate()

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    // Set our view from the "Main" layout resource
    SetContentView (Resource.Layout.Main);

    Spinner spinner = FindViewById<Spinner> (Resource.Id.spinner);

    spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected);
    var adapter = ArrayAdapter.CreateFromResource (
            this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);

    adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
    spinner.Adapter = adapter;
}

Main.axml 版面配置設定為內容檢視之後,會 Spinner 使用 FindViewById<>(int)從版面配置擷取小工具。 CreateFromResource() 方法接著會建立新的 ArrayAdapter,它會將字串陣列中的每個項目系結至 的初始外觀 Spinner (也就是選取時每個專案在微調器中的顯示方式)。 標識元 Resource.Array.planets_array 會參考 string-array 上述定義的 ,而 Android.Resource.Layout.SimpleSpinnerItem 標識符會參考平臺所定義的標準微調程序外觀配置。 SetDropDownViewResource 呼叫 以在開啟小工具時定義每個項目的外觀。 最後,設定 ArrayAdapter 為藉由設定 Adapter 屬性,將其所有專案與 Spinner 產生關聯。

現在提供回呼方法,以在從 Spinner中選取專案時通知應用程式。 以下是此方法看起來應該的樣子:

private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    string toast = string.Format ("The planet is {0}", spinner.GetItemAtPosition (e.Position));
    Toast.MakeText (this, toast, ToastLength.Long).Show ();
}

選取專案時,傳送者會轉換成 Spinner ,以便存取專案。 Position使用的ItemEventArgs屬性,您可以找出選取物件的文字,並用它來顯示 Toast

執行應用程式;看起來應該像這樣:

Screenshot example of Spinner with Mars selected as the planet

使用索引鍵/值組的微調程式

通常,您必須使用 Spinner 來顯示與應用程式所使用之某種數據相關聯的索引鍵值。 因為 Spinner 無法直接使用索引鍵/值組,因此您必須個別儲存索引鍵/值組、使用索引鍵值填 Spinner 入 ,然後使用Spinner中選取的索引鍵位置來查閱相關聯的數據值。

在下列步驟中 ,HelloSpinner 應用程式會修改為顯示所選行星的平均溫度:

將下列 using 語句新增至 MainActivity.cs

using System.Collections.Generic;

將下列實例變數新增至 MainActivity 類別。 此清單會儲存行星的索引鍵/值組及其平均溫度:

private List<KeyValuePair<string, string>> planets;

在方法中 OnCreate ,在 宣告之前 adapter 新增下列程序代碼:

planets = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Mercury", "167 degrees C"),
    new KeyValuePair<string, string>("Venus", "464 degrees C"),
    new KeyValuePair<string, string>("Earth", "15 degrees C"),
    new KeyValuePair<string, string>("Mars", "-65 degrees C"),
    new KeyValuePair<string, string>("Jupiter" , "-110 degrees C"),
    new KeyValuePair<string, string>("Saturn", "-140 degrees C"),
    new KeyValuePair<string, string>("Uranus", "-195 degrees C"),
    new KeyValuePair<string, string>("Neptune", "-200 degrees C")
};

此程式代碼會建立行星及其相關平均溫度的簡單存放區。 (在真實世界應用程式中,資料庫通常用來儲存密鑰及其相關聯的數據。

緊接在上述程式代碼後面,新增下列幾行來擷取索引鍵,並將其放入清單中(依序):

List<string> planetNames = new List<string>();
foreach (var item in planets)
    planetNames.Add (item.Key);

將此列表傳遞至建 ArrayAdapter 構函式(而非 planets_array 資源):

var adapter = new ArrayAdapter<string>(this,
    Android.Resource.Layout.SimpleSpinnerItem, planetNames);

修改 spinner_ItemSelected ,以便使用選取的位置來查閱與所選行星相關聯的值(溫度:

private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    string toast = string.Format("The mean temperature for planet {0} is {1}",
        spinner.GetItemAtPosition(e.Position), planets[e.Position].Value);
    Toast.MakeText(this, toast, ToastLength.Long).Show();
}

執行應用程式;快顯通知看起來應該像這樣:

Example of planet selection displaying temperature

資源

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。