PreferenceFragment에서 스크롤바 제어하기..

PreferenceFragment 클래스는 안드로이드 API 11에서 처음 소개되었고, 기존의 PreferenceActivity(보통 설정화면을 처리하기 위해서 사용한다)를 허니콤 이상의 버전에서 Fragment로 대체하기 위해서 추가되었다.

대부분 안드로이드 앱의 설정 부분을 살펴보면, 설정의 항목이 많은 경우 기본 스크롤바를 보게 된다. 이 스크롤바에 스타일을 주거나, 없애는 등의 작업을 할 수 있는 방법을 살펴보자. PreferenceFragment 클래스에서 화면에 설정항목들을 보여주기 위한 뷰로 ListView를 사용하고 있다. 그리고 기본 API에서는 ListView에 접근하는 메서드나 ListView의 메서드를 지원하지 않는다.

그래서 PreferenceFragment를 상속한 클래스에서 Reflection을 이용해서  ListView객체를 사용해서, 간단하게 PreferenceFragment의 스크롤바를 제거해보자.

아래의 AbstractPreferenceFragment는 여러 설정화면을 구현하는 클래스가 상속해서 사용하도록 만든 부모 클래스이다. 각 설정화면을 구현하는 클래스에서는 이 AbstractPreferenceFragment 클래스를 상속해서, disableScrollBar()만 호출하면 스크롤바를 제거할 수 있다.

public class AbstractPreferenceFragment extends PreferenceFragment {
	protected void disableScrollBar() {
		Field field = null;
		try {
			field = PreferenceFragment.class.getDeclaredField("mList");
			// 소스를 확인해 보니, 아이스크림 이후(허니콤은 소스를 공개하고 있지 않아서 모르겠지만 동일하지 않을까 예측) 부터
			// 계속 mList라는 변수명을 사용하고 있음
			field.setAccessible(true);
			((ListView) field.get(this)).setVerticalScrollBarEnabled(false);
		} catch (Exception e) {
		}
	}
}

이제, 위의 코드를 활용해서 ListView에 스크롤바를 트윅해서 스타일이나, 여러가지 변경을 할 수 있겠다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.