반응형
다음과 같이 스피너를 구현하고자 한다.
초기 관계에는 기타를 default로 하며,
다이나믹하게 group 명을 가져올 예정이다.
준비물 : Spinner, Spinner에 들어갈 list(xml파일), Adapter
1. Layout 구성
먼저, xml파일에 레이아웃을 먼저 구성해준다. id : spinner_group
더보기
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/textView2"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center"
android:text="@string/relationship"
android:textColor="@color/black"
android:textSize="24sp"
android:textStyle="bold" />
<EditText
android:id="@+id/editTVGroup"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:ems="10"
android:gravity="center"
android:inputType="textPersonName"
android:text="@string/direct" />
<Spinner
android:id="@+id/spinner_group"
android:layout_width="130dp"
android:layout_height="wrap_content" />
</LinearLayout>
2. array 구성 : Spinner 항목
항목은 아래 코드와 같이 작성해준다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="event_array">
<item>기타</item>
</string-array>
<string-array name="group_array">
<item>기타</item>
<item>직접 입력</item>
</string-array>
<string-array name="route_array">
<item>현금</item>
<item>계좌이체</item>
<item>직접 입력</item>
</string-array>
</resources>
3. SpinnerHandler 생성(명칭은 정확하지 않다.)
안드로이드 documenation을 참고하면 SpinnerActivity를 생성했는데,
Activity를 상속받을 필요는 없어보여 다음과 같이 구성했다.
여기서 TextView에 해당하는 부분이 구현상 겹쳐 하나의 attribute으로 구성하였다.
(spinner 선택 시 textView의 text가 바뀌는 방식)
class SpinnerHandler(tv:TextView) : AdapterView.OnItemSelectedListener {
var textview: TextView=tv
override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) {
if (parent != null) {
textview?.text =parent.getItemAtPosition(pos).toString()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
4. 실제 코드에서 Spinner Setting
Fragment에서 불러와 사용했다.
// 경조사 spinner
val eventspinner = binding.spinnerEvent
this.context?.let {
ArrayAdapter.createFromResource(
it,
// spinner에서 보여줄 list
R.array.event_array,
// customize된 선택된 친구 설정 가능.
android.R.layout.simple_spinner_item
).also { adapter->
// customize된 dropdownView 설정가능.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
eventspinner.adapter=adapter // 실제로 spinner에 adapter를 적용한다.
}
}
val eventSpinnerActivity = SpinnerHandler(event)//textView를 인자로 전달.
eventspinner.onItemSelectedListener = eventSpinnerActivity //onItemSelectedListener 전달하여 마무리
Resource라는 단어가 보인다.
해당하는 부분에 customize된 xml을 인자로 넣으면, customize된 Spinner 사용이 가능하다.
R.array.event_array ← 2번째 단계에서 만든 xml파일에서 가져온 array이다.
전반적으로 Customize, 활용이 간단했다.
궁금하신 점이나 잘못된 점 있으면 댓글 부탁드립니다.
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] mobile navigation : popUpTo, popUpToInclusive, 이전 Fragment 중복 안되게 설정 (0) | 2022.11.18 |
---|---|
[안드로이드] DatePickerDialog : 날짜 선택하기 (Kotlin) (0) | 2022.10.27 |
[안드로이드] RecyclerView, ListView에서 item이 클릭이 안될 때 : descendantFocusability (0) | 2022.10.03 |
[안드로이드] ListView 구현하기(Kotlin) (0) | 2022.10.02 |
[안드로이드] Bottom Navigation View 숨기기/ 프래그먼트에서 Activity View Control하기(Kotlin) (0) | 2022.09.22 |
댓글