스피너는 값 집합에서 하나의 값을 선택할 수 있는 빠른 방법을 제공합니다. 기본 상태에서 스피너는 현재 선택된 값을 표시합니다. 스피너를 탭하면 사용자가 선택할 수 있는 다른 모든 값을 보여주는 메뉴가 표시됩니다.
Spinner
객체를 사용하여 레이아웃에 스피너를 추가할 수 있습니다. 이 작업은 일반적으로 XML 레이아웃에서 <Spinner>
요소를 사용하여 실행합니다. 예를 들면 다음과 같습니다.
<Spinner android:id="@+id/planets_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
스피너를 선택 목록으로 채우려면 Activity
또는 Fragment
소스 코드에서 SpinnerAdapter
를 지정합니다.
Material Design 구성요소를 사용 중인 경우 노출된 드롭다운 메뉴는 Spinner
와 같습니다.
스피너에 사용자 선택 사항 채우기
스피너에 제공하는 선택 항목은 어떤 소스에서든 가져올 수 있지만 SpinnerAdapter
를 통해 제공해야 합니다. 예를 들어 선택 항목을 배열에서 사용할 수 있는 경우 ArrayAdapter
, 선택 항목을 데이터베이스 쿼리에서 사용할 수 있는 경우 CursorAdapter
를 통해 제공해야 합니다.
예를 들어 스피너에 사용 가능한 선택 항목이 미리 결정되면 문자열 리소스 파일에 정의된 문자열 배열을 통해 이러한 선택 항목을 제공할 수 있습니다.
<?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>
이와 같은 배열을 사용하면 Activity
또는 Fragment
에 다음 코드를 사용하여 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);
위의 예와 같이 Activity
또는 Fragment
를 사용하여 AdapterView.OnItemSelectedListener
인터페이스를 구현하는 경우 this
를 인터페이스 인스턴스로 전달할 수 있습니다.