안드로이드/View

[Android/Java] Spinner background 설정 시 화살표가 사라지는 문제

도트7 2023. 10. 10. 01:08

 Spinner를 꾸미기 위해서 background속성에 color를 설정하거나 drawable을 작성하여 적용하면 우측 끝에 보이던 화살표(▼)가 사라지는 걸 볼 수 있는데, 이는 기존에 background 속성에 설정된 리소스가 화살표 이미지를 포함하고 있었기 때문에 발생하는 문제다. 이 화살표는 사용자에게 "여기를 누르면 아래 방향으로 메뉴를 펼칠 수 있다"는 것을 알려주는 직관적이고 중요한 요소라고 생각했기에 화살표를 살려보기로 했다.

 

 여러 가지를 시도해 본 결과 화살표를 배치하는 방법은 크게 두 가지가 있었다. 첫 번째는 우격다짐식 해결법이지만 Spinner를 LinearLayout, ConstraintLayout 등과 같은 ViewGroup의 하위에 두고 ViewGroup의 background를 변경하는 것이다. 이 때 Spinner는 하단 라인이나 기본 테두리가 없는 테마를 적용한 상태여야 한다.

 

 

 다른 방법은 Spinner에 적용할 리소스(drawable)에 화살표 이미지를 포함시키는 것이다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <stroke
                android:width="3dp"
                android:color="@color/baltic_sea"/>
            <corners
                android:radius="10dp" />
        </shape>
    </item>

    <item
        android:gravity="right|center_vertical"
        android:width="20dp"
        android:height="20dp"
        android:end="10dp"
        android:drawable="@drawable/baseline_arrow_drop_down_24">
    </item>
</layer-list>

 위와 같이 작성한 xml을 Spinner의 background로 지정해준다. 화살표는 안드로이드 스튜디오 [File - New - Vector Asset]을 통해 생성했기에 같은 이름으로 검색하면 바로 찾을 수 있을 것이다.