오늘 제가 해볼 것은 Preference Category를 Customizing 해보는것입니다. 
우선 결과 부터 보여드리면, 


이런식으로 Category Title을 변경해보는것이죠.

위와 같은 Layout의 Preference XML은 아래와 같습니다. 

<?xml version="1.0" encoding="utf-8"?>


<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"

        android:title="@string/app_name">

    <PreferenceCategory

    android:title="@string/category_name">

    <Preference android:key="app_name"

        android:persistent="false"

        android:title="@string/app_name"

    />

    </PreferenceCategory>  

</PreferenceScreen>


PreferenceScreen에 PreferenceCategory를 추가하고, 
PreferenceCategory에 Preference Item이 하나 있는 형태 이지요, 

여기서, PreferenceCategory의 Layout을 Customizing하는게 목적입니다.

Preference Item의 Layout을 변경할때 사용하는것은,  android:layout 속성을 정의 하는것입니다. 


android:layout="@layout/my_preference_category" 뭐 이런식으로 추가 해주는것지요 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="horizontal"

  android:layout_width="fill_parent"

  android:layout_height="25dip"

  android:gravity="center_vertical"

  android:paddingLeft="5dip"

  android:background="#323331">

  

  <ImageView 

  android:layout_width="wrap_content"

  android:layout_height="fill_parent"

  android:src="@android:drawable/ic_menu_info_details"/>

  <TextView

  android:textStyle="bold"

  android:id="@android:id/title"

  android:layout_width="wrap_content"

  android:layout_height="fill_parent" 

  android:text="test"

  android:gravity="center"

  android:textColor="#FF0000"

  />

  

</LinearLayout>


여기서 부터, 안드로이드 개발의 짜증나는 점이 나타나는데, 
PreferenceCategory에서 지정한 title 값과, 내가 만든 Layout의 TextView가 연결되어야 하는데, 
id값을 어떻게 지정해주어야 한다는 정보가, developer.android.com을 아무리 뒤져 봐도 없습니다.

결국 Android Source코드를 보고 나서야 
@android:id/title로 줘야 한다는걸 알게 되었고,  이렇게 해주고 나니 정상적으로  동작합니다.

android:layout은 PreferenceCategory의 XML Attribute가 아니라, Preference 아이템 클래스들의 최상위 클래스인 Preference Class의 
XML Attribute입니다. 

즉, PreferenceCategory뿐 아니라, CheckBoxPreference 등등 모든 Preference들을 이와 같은 원리로 Customizing할 수 있습니다. 

+ Recent posts