안드로이드 프로그래밍을 하다보면 설정 액티비티를 만들어야 할때가 있습니다.
설정 액티비티들은 리스트로 구성되어있죠.
리스트를 컨버팅하면서 만든다고 해도, 
텍스트만 나오는 row가 있고, 체크박스고 혼재된 row, 입력창이 들어가야하는  row가 있을 수 있습니다.
이럴때 편하게 사용할 수 있는 방법이 있습니다.

바로 PreferenceActivity 를 상속받아서 만드는것이지요.





보통은 아래의 화면처럼 나옵니다.
분류별 항목별로 묶어 분류바를 기준으로 여러 설정들이 보여지죠.
기본적으로는 텍스트, 큰텍스트와 그 밑의 작은 텍스트, 거기에 더해진 체크박스 입니다.

 
 
 
 


사실 직접 이런 화면을 구성해도 되지만, 
특별히 월등한 UI를 제공하고자 하는 목적이 아니라면 쓰라고 있는 기능을 쓰는것이 빠르고 편리합니다.


PreferenceActivity를 사용하기 위해서는 두가지 단계를 거쳐야합니다. 
 1. 레이아웃 작성
 2. 액티비티 작성

사실 일반적인 액티비티들도 모두 레이아웃을 작성하고 액티비티를 작성하기 때문에 그렇게 어렵게 느껴지진 않습니다.
다만, 화면에 어떻게 보여질지, 어떻게 배치할지에 대한 부분을 배제하고 xml레이아웃을 작성할 수 있기때문에 이 방법은 직접 설정 xml레이아웃을 작성하는것보다 빠르고 월등합니다.


 1. 레이아웃 작성

PreferenceActivity에 사용되는 Layout xml은 일반 Activity에 사용하는 xml 과 작성법이 조금 다릅니다.
일반 액티비티에 사용하는 default layout이 LinearLayout 이라면, 
Preference 액티비티에 사용하는 default layout은 PreferenceScreen 입니다.

PreferenceScreen을 기본으로 하는 Layout XML 파일의 작성은 아래와 같이 할 수 있습니다.


PreferenceActivity에 사용할 xml 파일 생성
 
 
 
 


파일을 생성했으면 이제 작성할 차례입니다.


위와같은 코드가 작성되어있습니다.
이제 여기에 필요한 기능들을 추가로 작성합니다.

PreferenceScreen 태그 안에는,
복수의 PreferenceCategory가 들어갈 수 있습니다.
또 PreferenceCategory 안에는 복수의 Preference들이 들어갈 수 있습니다.




이 Preference의 태그의 속성들은 간단하게는, 
"키(KEY)"와 "타이틀(TITLE)" / "키(KEY)"와 "타이틀(TITLE)", 그리고 "값(VALUE)"로 이루어져있습니다.
다른 속성들이 많이 있지만, 이것들만 사용해도 어렵지 않게 설정의 기능들을 구현해 낼 수 있습니다.

저는 간단하게 텍스트로 이루어진 카테고리와, 체크박스로 이루어진 카테고리를 추가해 설정 화면을 만들어보려고 합니다.
결과적으로는 아래와 같은 화면을 만들 수 있습니다.

 
 

안드로이드에서 제공해주는 것만으로도 이렇게 그럴듯한 설정화면을 만들었습니다.

이 설정 화면의 XML 코드는 아래와 같습니다.


눈여겨 볼점은 Preference를 두가지 사용했다는 것.
키와 타이틀을 지정했다는 것입니다.

여기서는 간단한 화면을 구성하기 위해 PreferenceCheckBoxPreference만을 사용했지만, 
(실제로는 EdittextPreference, ListPreference 등 많은 Preference가 있습니다.)





 2. 액티비티 작성

이제 액티비티로 가봅니다.

PreferenceActivity를 처음작성할 때 달라진 부분은 하나뿐입니다.

보통의 Activity에서 레이아웃을 설정할 때 setContentView(R.layout.파일이름)으로 설정한다면,
PreferenceActivity는 레이아웃을 설정할 때 addPreferencesFromResource(R.layout.파일이름)과 같이 합니다.

setContentView -> addPreferenceFromResource

이렇게 바뀐 것 빼고는 액티비티의 기본 설정에서 크게 달라진것은 없습니다.

화면만 보여주기 위해서 액티비티는 아래와 같이 작성하면 됩니다.


하지만 화면만 보여주는 어플리케이션은 없기때문에 이제부터 체크박스 체크/해제에 따른 이벤트 처리,
어플리케이션 이름등을 클릭했을때의 이벤트 처리에 대해서 알아보도록 하겠습니다.


일반적인 Activity라면 클릭이벤트를 OnClickListener로 받습니다.
하지만 PreferenceActivity는 클릭이벤트를 OnPreferenceClickListener로 받아야 합니다.
일반적인 클릭이 아닌, Preference에 대한 클릭이기 때문입니다.


클릭이벤트는 아래와 같이 구현할 수 있습니다.


여기서 한가지 주의할점은 Preference의 CheckBoxPreference는 자동으로 체크됨을 잡아내서 자신의 상태를 변경합니다.
(기존의 Activity에서 체크박스를 사용하듯이 하면, 체크 되있던걸 돌리고, 체크 안되야 하는걸 체크하는 사태가 일어납니다.)

구현은 여기까지면 충분히 기본적인 설정의 기능들을 사용할 수 있습니다.

이제 클릭이벤트에 각자에 맞는 기능들을 추가해주면됩니다.


Posted by croute

댓글을 달아 주세요

  1. Favicon of http://hackeric.egloos.com BlogIcon 견가가 2012.06.11 23:12  댓글주소  수정/삭제  댓글쓰기

    최근 API 에는 addPreferencesFromResource 녀석이 depress 되었더군요,

    Fragment 라는 녀석을 사용해서 구성하도록 바뀐것 같더라구요.

  2. BlogIcon 신형섭 2013.04.17 10:03  댓글주소  수정/삭제  댓글쓰기

    항상 글쓴이를 포함하여 지식공유해주시는분들께 감사의마음을 전하고싶습니다 ㅎ

    제가딱 필요한내용이에요.

    감사합니다.

    - 지식은 공유되어야 가치를 인정받는다 -

  3. Favicon of https://basixblog.tistory.com BlogIcon Basix 2014.09.22 20:50 신고  댓글주소  수정/삭제  댓글쓰기

    onPreferanceClick(맞나)를 Override할수 가 없네요...
    슈퍼클래스 뭐라 뭐라 하는데 뭔소린지..

  4. 홀길 2015.01.06 02:45  댓글주소  수정/삭제  댓글쓰기

    ㅇㅇㅇㅇㅇ

  5. 피해자 2018.01.26 03:52  댓글주소  수정/삭제  댓글쓰기

    개발요청한프로그램 잔금주면 소스 안주고 협박합니다 개사기꾼
    절대로 작업 맡기지 마시기 바랍니다.

  6. 피해자 2018.04.07 08:20  댓글주소  수정/삭제  댓글쓰기

    38섯다사기 38섯다 먹튀입니다 돈따면 차단후 먹튀 합니다

  7. Favicon of http://000.com BlogIcon 총판모집 2018.04.15 20:30  댓글주소  수정/삭제  댓글쓰기

    스카이프: pvaltrade 바둑이총판모집 총판모집
    업계최고대우 합니다
    바둑이게임총판모집
    총판모집
    토토총판모집

  8. 다잡아 2018.05.05 02:32  댓글주소  수정/삭제  댓글쓰기

    버경조작 사기입니다 조작 ♩♫♫심하네요 이용하지마세요
    폭스서버사기 버경 조작 ♪♬♪ 심합니다 개사기꾼 발리서버 절대 이용하지마세요
    폭스서버 이용하지마세요 발리서버이용하지마세요
    폭스주소 발리주소
    발리서버오픈
    폭스서버오픈
    발리서버접속기
    폭스서버접속

  9. 피해자 2018.06.06 11:36  댓글주소  수정/삭제  댓글쓰기

    사기꾼 원승호가 운영중인 경마사이트 먹튀입니다
    사기꾼 계좌 카톡 ticktock5 스카이프 thusworld789
    유한경마사이트 먹튀 입니다 ddy445.com 먹튀입니다
    화랑경마사이트 먹튀 입니다 bby45.com 먹튀입니다
    사기계좌 국민은행 801210490890 원승호 사기계좌 국민은행 275210320807 원승호
    사기꾼 원승호는 불법사설 경마 화랑 유한을 운영하고
    리치 바둑이를 운영하며 먹튀중입니다

  10. BlogIcon 포커고수 2018.09.15 21:11  댓글주소  수정/삭제  댓글쓰기

    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com

    webmaster@pokergosu.com 포커게임머니 문의 환영합니다

  11. BlogIcon 포커고수 2018.09.16 13:41  댓글주소  수정/삭제  댓글쓰기

    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com

    webmaster@pokergosu.com 포커게임머니 문의 환영합니다

  12. BlogIcon 포커고수 2018.09.17 02:31  댓글주소  수정/삭제  댓글쓰기

    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com

    webmaster@pokergosu.com 포커게임머니 문의 환영합니다

  13. BlogIcon 포커고수 2018.09.18 02:37  댓글주소  수정/삭제  댓글쓰기

    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com
    pokergosu.com

    webmaster@pokergosu.com 포커게임머니 문의 환영합니다