본문 바로가기

Android/Guide

[Spinner] 스피너 드랍다운 위치/높이 (dropdown position)

조회 조건으로 List 중 하나를 선택할 때 Spinner를 사용한다.

안드로이드에서 기본으로 제공하는 layout을 사용하다 보면 몇가지 문제를 만나게 된다.


물론 customize를 하면 입맛에 맞게 만들 수 있으니, 아래는 기본제공 layout을 사용한다는 가정하에 설명한다.


별일이 없다면 아래와 같이 layout을 선언하게 된다.

Adapter adapter = new Adapter(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


1. dropdown 가로/위치 (xml)                                   

  - spinnerMode = dropdown 과 dialog를 사용할 수 있다. dialog는 전혀 변경할 방법이 없으니 dropdown을 사용하자.

  - dropDownWidth 를 사용하여 가로 폭을 결정한다.

  - overlapAnchor = false 로 설정하면 표시영역 바로 아래에서 리스트가 시작된다.

android:spinnerMode="dropdown"
android:dropDownWidth="@dimen/spinner_width"
android:overlapAnchor="false"


2. dropdown 세로 (java)                                        

  - 불행히도 xml에서 설정할 수 없으며, 아래처럼 reflect 기능을 이용한다.

spinner = (Spinner)findViewById(R.id.spinner);

try {
Field popup = Spinner.
class.getDeclaredField("mPopup");
popup.setAccessible(true);

ListPopupWindow window = (ListPopupWindow)popup.get(spinner);
window.setHeight(700); //pixel
} catch (Exception e) {
e.printStackTrace()
;
}


완전 깔끔하진 않지만 기본제공으로 나름 이쁘게 만들 수 있는 방법이다.