스피너도 리스트뷰처럼 여러개의 아이템을 보여주고 하나를 선택할 수 있도록 하는 선택 위젯이다. 스피너를 클릭하면 아래쪽에 창이 나오면서 항목을 쭉 보여준다.
스피너를 사용하기 위한 코드를 작성해보자.
먼저 메인 액티비티의 XML 코드를 아래와 같이 작성한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
</Spinner>
</LinearLayout>
텍스트뷰는 선택된 아이템을 알려주기 위한것이다.
package io.swnomad.spinner;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
TextView textView;
String[] items = {"John", "Hangbae", "Panho", "Michael", "Henrry", "Kelly"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
/* 스피너를 위한 어댑터 구성 */
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
/* 스피너 객체 참조하여 어댑터 설정 */
Spinner spinner = findViewById(R.id.spinner);
spinner.setAdapter(adapter);
/* 아이템이 선택되었을 때의 이벤트 처리 리스너 설정 */
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
textView.setText(items[position]+"이 선택되었습니다.");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
textView.setText("아이템을 선택하세요");
}
});
}
}
스피너도 선택 위젯이므로 어댑터 패턴을 사용한다. 따라서 데이터를 어댑터에 설정하였다. 여기서는 ArrayAdapter
클래스를 사용했다.
public ArrayAdapter(Context context, int textViewResourceId, T[] objects)
첫 번째 전달인자는 컨텍스트이다. 두 번째 전달인자는 뷰를 초기화할 때 사용되는 레이아웃의 리소스 ID값이다. 여기서 전달된 android.R.layout.simple_spinner_item
은 안드로이드 API에 미리 정의된 값으로 문자열을 아이템으로 보여주는 스피너를 위한 레이아웃이다. 세 번째 전달인자는 아이템으로 보여줄 문자열 배열이다.
이제 스피너에 어댑터를 설정해주고 선택 이벤트 처리 리스너를 설정해준다.
앱을 실행하면 아래와 같은 화면을 볼 수 있다.
'안드로이드' 카테고리의 다른 글
(안드로이드) 40 - 복합 위젯(Composite Widget) (0) | 2020.05.19 |
---|---|
(안드로이드) 39 - 그리드뷰(GridView) (0) | 2020.05.19 |
(안드로이드) 37 - 리스트뷰(ListView) (0) | 2020.05.19 |
(안드로이드) 36 - 비트맵(Bitmap) 버튼 (0) | 2020.05.19 |
(안드로이드) 35 - 나인패치(9-Patch) 이미지 (0) | 2020.05.18 |