IT_Programming/Android_Java

[펌] PreferenceActivity 디자인 하기

JJun ™ 2012. 10. 5. 21:58


출처: http://oic.tstore.co.kr/front/community/mentoring/viewMentoring.action?seq=184



앱을 제작 할 때 사용자의 선호설정을 저장하기 위해서 PreferenceActivity 를 많이 활용 합니다. 

이 PreferenceActivity 에 대한 활용 방법은 많은 글들이 나와 있으나, 그대로 따라 했을 경우 검은 화면에 흰 글씨로만 표시됩니다. 그래서 원래의  앱과 디자인 컨셉이 맞지 않아 배경, 글자색, 등등 수정이 필요 한 경우가 발생하고, 선호설정 Activity 를 일반 엑티비티처럼 완전히 따로 만드는 경우도 생깁니다. 

이 글에서는 PreferenceActivity 의 일반적인 사용법은 다루지 않고, 단지 PreferenceActivity 를 사용하여 설정 엑티비티를 자신이 개발한 앱에 맞게 디자인을 변경 하는 것에 대해서 얘기 할 것입니다. 


1. PreferenceActivity 에 레이아웃 넣기 

PreferenceActivity는 android.app.ListActivity 로 부터 상속 받은 엑티비티이기 때문에 ListActivity 를 수정하는 것과 같이 작업하면 됩니다. 

먼저 PreferenceActivity 에 사용할 레이아웃을 만듭니다. 
편의상 settings_layout.xml 로 이름붙였습니다. 

다른 뷰위젯들을 포함시키거나, 배경색상, 크기 등을 변경 할 수 있습니다. 

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="vertical"
       android:background="#ffffffff">

// 타이틀바 공통으로 넣어줌 
<include  layout="@layout/title_bar" />

    <ListView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:cacheColorHint="#ffffffff" />
    
</LinearLayout>


이와 같이 레이아웃안에 타이틀을 넣는다든가 버튼이나 기타 원하는 대로 레이아웃을 만들수 가 있고, 중요한 것은 ListView 의 아이디를 android:id="@android:id/list" 해 주어야 합니다. 

이제 PreferenceActivity 에서 상속받은 설정 페이지 SettingActivity 의 onCreate 를 작업 해줍니다. 


public class SettingActivity extends PreferenceActivity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
    
        // 설정에 사용할 항목 
        addPreferencesFromResource(R.xml.setting);

        // 레이아웃을 붙여 줍니다. 
        setContentView(R.layout.setting_layout);
    }
}
 


단순히 배경 색상만 변경 한다면 레이아웃까지 필요 없고 아래와 같이 할수도 있습니다. 

 findViewById(android.R.id.list).setBackgroundColor(Color.WHITE);




2. 텍스트 색상 변경 

다음으로 선호설정에 나오는 텍스트 색상은 아래와 같이 변경 할 수 있습니다. 
새로운 스타일을 만듭니다. textColor에 원하는 색상을 넣습니다. 

 <style name="SettingsTheme" parent="android:Theme.Light">
       <!-- Override properties according to your need -->
       <item name="android:textColor">#444444</item>
 </style>


AndroidManifest.xml 에서 테마를 변경해 줍니다. 

<activity android:name=".SettingActivity" 
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboard" 
            android:theme="@style/SettingsTheme"/>