다음을 통해 공유


Xamarin.Android 회전자

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: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> 요소는 위 레이아웃에서 참조하는 TextView 제목 문자열을 정의합니다 Spinner . 요소는 <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()메서드는 문자열 배열의 각 항목을 초기 모양 Spinner 에 바인딩하는 새 ArrayAdapter항목을 만듭니다(선택할 때 각 항목이 스피너에 표시되는 방식). ID는 위에서 정의한 것을 string-array 참조하고 Android.Resource.Layout.SimpleSpinnerItem ID는 Resource.Array.planets_array 플랫폼에서 정의한 표준 회전자 모양에 대한 레이아웃을 참조합니다. SetDropDownViewResource 는 위젯을 열 때 각 항목의 모양을 정의하기 위해 호출됩니다. 마지막으로 속성을 ArrayAdapter 설정하여 모든 항목을 해당 항목과 Spinner 연결하도록 설정됩니다 Adapter .

이제 항목이 선택되었을 때 애플리케이션에 알리는 콜백 메서드를 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 니다. 그런 다음, 회전자에서 선택한 키의 위치를 사용하여 연결된 데이터 값을 조회해야 합니다.

다음 단계에서 는 HelloSpinner 앱이 수정되어 선택한 행성의 평균 온도를 표시합니다.

다음 문을 MainActivity.cs 추가합니다using.

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 특성 라이선스에 설명된 용어에따라 사용되는 작업을 기반으로 하는 수정 사항입니다.