Android

[Android/kotlin] spinner 커스텀해서 사용하기

dev_zoe 2021. 3. 7. 01:49
반응형

 

res/strings.xml

- 여기에 spinner를 구성할 item을 모아놓은 string array를 정의한다.

    <string-array name="todo_spinner_ampm">
        <item>오전</item>
        <item>오후</item>
    </string-array>
    <string-array name="todo_spinner_hour">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
        <item>8</item>
        <item>9</item>
        <item>10</item>
        <item>11</item>
        <item>12</item>
    </string-array>
    <string-array name="todo_spinner_minute">
        <item>00</item>
        <item>05</item>
        <item>10</item>
        <item>15</item>
        <item>20</item>
        <item>25</item>
        <item>30</item>
        <item>35</item>
        <item>40</item>
        <item>45</item>
        <item>50</item>
        <item>55</item>
    </string-array>

custom한 spinner의 배경 drawable

(layer-list로 아이템들을 겹쳐서 drawable을 만듦)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item
                android:drawable="@drawable/edittext_design"/>
            <item
                android:drawable="@drawable/ic_drop_down_arrow"
                android:gravity="center|end"
                android:width="10dp"
                android:right="10dp"
                android:height="10dp"/>
        </layer-list>
    </item>
</selector>

spinner가 포함된 layout.xml에는

        <Spinner
            android:id="@+id/todo_spinner_hour"
            android:layout_width="60dp"
            android:layout_height="35dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/todo_spinner"
            android:popupBackground="@drawable/edittext_design" />

background에 커스텀한 drawable을 지정한다.

(popupBackground는 spinner를 클릭해서 선택할 항목들이 popup으로 나타날때의 배경을 지정한다. edittext_design은 spinner 배경에서 회색 화살표만 뺀 부분을 지정했기 때문에, 위 캡쳐와같은 배경이 나타난다)

 

        val ampm = resources.getStringArray(R.array.todo_spinner_ampm)
        val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, ampm)
        binding.todoSpinnerAmpm.adapter = adapter

resources.getStringArray(R.array.배열이름) 으로 strings.xml에서 지정한 string array를 가져와서,

ArrayAdapter의 마지막 매개변수로 배열을 지정한 후,

해당 spinner에 adapter를 지정한다.

(여기서 requireContext()를 쓴 이유는 activity가 아닌 dialogfragment, 즉 fragment에서 spinner를 사용하기 때문에 context를 requireContext()를 주었음)

 

 

references

android-dev.tistory.com/35?category=813913

반응형