본문 바로가기

나의 플랫폼/안드로이드

[ Android ] PreferenceActivity와 Activity 상관 관계

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

작업을 하는 도중 Activity로 되어 있는 것을 PreferenceActivity로 바꿔야만 하는 일이 생겼습니다.

아주 간단합니다. Activity를 상속 받고 있는 것을 PreferenceActivity로 바꿔주면 되니깐요.


중요한 건!!! Layout을 표현할 때 입니다.

예를 들어

----------------------------------------------------

|                  [ Preference 형태 ]                               |

|     ---------------------------------------------    |

|        Preference list0                                               |

|     ---------------------------------------------    |

|        Preference list1                                               |

|     ---------------------------------------------    |

|                  [ Activity 형태 ]                                     |

|     _________                                                          |

|    |    버튼  |               EditText __________________    |

|     _________                                                          |

|     ---------------------------------------------    |


위와 같이 Prefernce list와 Activity Layout을 동시에 표현하고자 할 경우!!

어떻게 하면 될까요???


여러 번의 테스트 결과 중요한 사실을 알아냈습니다.

PreferenceActivity에서 setContentView 함수로 Layout을 잡아 줄 경우,

layout.xml에 꼭 android.R.id.listview를 넣어야만 합니다.

그렇지 않을 경우 에러 발생!!!

(현재 젤리빈에서는 android.R.id.list 임)


왜!! 꼭 넣어야만 할까요!! 그건!!

이미 지정되어 있는 androdi.R.id.listview 가 바로 Preference list로 사용되기 때문이지요.

setContentView : 전체적인 Layout을 잡는다.

addPreferencesFromResource : preference list (android.R.id.listview) 를 설정한다.


구글을 검색하면  Activity Layout과 Preference list가 함께 사용되는 내용은 많습니다.

그 내용에 제가 위에서 알려드린 부분만 알고 계시면 Layout을 Custom화 시키는 데 문제가 없겠죠.


좀더 자세한 사항이나 궁금한 사항이 있으신 분들은 댓글 달아주시면 답변 드리겠습니다.

오늘도 즐코딩!

------------------------------------------------------------------------------------

요청 사항이 있어 간단하게 소스를 만들었습니다.


layout/activity_main.xml


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

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity"

    android:orientation="vertical" >


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world"/>

    <Button 

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="This is Button"/>

<ListView 

   android:id="@android:id/list"

   android:layout_width="match_parent"

   android:layout_height="match_parent"/>

</LinearLayout>


xml/main.xml


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

<PreferenceScreen

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

    <PreferenceScreen

        android:title="Preference1">

    </PreferenceScreen>

    <PreferenceCategory 

        android:title="Category">

        <PreferenceScreen

       android:title="Preference2">

   </PreferenceScreen>

   <PreferenceScreen

       android:title="Preference3">

   </PreferenceScreen>

   <PreferenceScreen

       android:title="Preference4">

   </PreferenceScreen>

    </PreferenceCategory>

</PreferenceScreen>


src/MainActivity.java


package com.example.preferencetest;


import android.os.Bundle;

import android.preference.PreferenceActivity;

import android.app.Activity;

import android.view.Menu;


public class MainActivity extends PreferenceActivity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

addPreferencesFromResource(R.xml.main);

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}


}


위 소스를 넣으시고 실행을 해보시면, 위에 TextView, Button이 생기고,
그 아래 Preference list가 생성이 되어 있는 것을 확인 할 수 있습니다.

더 궁금하신 사항이 있으신 분은 댓글 주세요~