조회 조건으로 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();
}
완전 깔끔하진 않지만 기본제공으로 나름 이쁘게 만들 수 있는 방법이다.