Xamarin.Android Spinner
Spinner
是一個小工具,可顯示用於選取專案的下拉式清單。 本指南說明如何建立簡單的應用程式,以在Spinner中顯示選項清單,然後進行修改,以顯示與所選取相關聯的其他值。
基本微調器
在本教學課程的第一個部分中,您將建立簡單的微調器小工具,以顯示行星清單。 選取行星時,快顯通知訊息會顯示選取的專案:
啟動名為 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:text
和 Spinner
屬性 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>
個元素會在上述配置中定義 和 Spinner
所TextView
參考的標題字串。
元素 <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
。
執行應用程式;看起來應該像這樣:
使用索引鍵/值組的微調程式
通常,您必須使用 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();
}
執行應用程式;快顯通知看起來應該像這樣:
資源
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。