안녕하세요. 

대부분의 프로그램이 설정 관련 화면을 만들게 되는데요. 

안드로이드에서 이 부분도 거의 정형화가 되어 있어서 기본적으로다  지원하더군요.

"알짜만 골라 배우는 안드로이드 프로그래밍" 책은  이 부분을 잘 설명하고 있는데요.
"프로페셔널  안드로이드 개발"은   그냥 보통의  activity를 만들어서 전부 코딩하는 것으로 알려주더군요.

두 방법다 장점이 있기는 하지만,
일관된  UI 와  작업을 효율성을 위해서는  "알짜..." 의 방법이  좋을 듯합니다.


아래 내용은  설정 화면을  만드는 쉬운 방법입니다.


1.  환경설정 xml 파일 만들기 

  이클립스의  File  -  New  - Other  에 가면  아래와 같은 창이 나옵니다.
set00.png

Android XML File을 선택합니다.

set01.png

빨간색 사각형 한 곳만   알맞은 값으로  넣어 놓고  [Finish] 버튼을 누릅니다.

그럼,  setting.xml 파일이    /res/xml 아래에 생성이 됩니다.


2.  화면 구성

/res/xml/setting.xml 파일을 선택하면,

PreferenceScreen 이라는 것이 보이는 데요.  이것을 선택하고,   [Add] 버튼을 누르면   아래처럼 추가 가능한 것들이 나옵니다.
set02.png

이것들이 설정화면에  사용가능한 것들인데요.

이름 그대로   CheckBox,  List  , Edit 등을  추가할 수 있구요.
Ringtone은   벨소리 종류 선택을 추가 할 수 있답니다.

RreferenceCategory 는    설정의 종류를 그룹 지을 때 사용하구요.

PreferenceScreen은   서브 화면으로  전환해서 사용하는 경우에 사용한답니다.

set03.png

위 그림처럼  CheckBoxPreference 를 추가하면  오른쪽에  속성값을  넣을 수가 있는데요.

이중에 중요한 것이

Key  인데요,   설정에 저장된 값을  읽어 올때 사용한답니다.
Title 과  Summary 는  화면에 출력되는 값이구요.

set04.png

ListPreference는  Key, Title, Summary  말고도,
Entries 와  Entry values 를  넣어주어야 하는데요.

리스트이기 때문에 출력할 내용을  배열로  넣어 주어야 합니다.

set05.png

strings.xml 에   출력할  내용을 가지고 있는 배열을  만듭니다.

1개는  화면 출력용으로,  1개는  실제값을 가진 배열로 만듭니다.

set06.png


그런 후에   setting.xml 에서  Entries 의 옆의 [Browse...] 버튼을 누르면 ,  위 그림처럼 선택할 수 있는 것이 나온답니다.

set07.png

위  그림처럼  선택해 주시면 됩니다.

이런식으로  화면 작업을  다 하신 후에  java class를 만들어 주시면 됩니다.


3. 환경설정 java class 만들기

이클립스의   File - New - class 를 선택합니다.
  set08.png

SuperClass를    옆의 [Browse...]버튼을  눌러서  선택해 줍니다.
set09.png

그리고  [Finish]를 눌러서  소스를 생성합니다.


--------------------  소스 -----------------------------

public class Setting extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        addPreferencesFromResource(R.xml.setting);
    }

}
------------------------------------------------------

빨간색 부분만 추가해 주시면  된답니다.




4.   AndroidManifast.xml 에서 activity  추가

환경설정화면도   activity 이기 때문에  매니패스트 파일에 추가해 주어야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.bolero.texttest"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TextTest"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <activity android:name="Setting" android:label="@string/app_name"></activity>
</application>
    <uses-sdk android:minSdkVersion="4" />

</manifest>



5.  호출 부분 작업

이제  메인 activity 에서  환경설정 activity를 호출해 주어야 하는데요.


     private void setting()
    {
        Intent i = new Intent(this, Setting.class);
       
        startActivity(i);
    }

위와 같이  Intent를 만들어서 호출하는 함수하나 만들어서,  원하는 곳 아무곳에서나 호출하면 된답니다.

이렇게 해서 호출하면   아래와 같이 나온답니다.

cap01.png

cap02.png



6.  환결 설정화면에서  선택한  값 가져오기

위와 같이 작업한  환경설정값을   안드로이드가  알아서  저장하고 불러오고 한답니다. 
그래서 코드의 어디에서도   저장하거나  로드하는 코드는 없구요.

이렇게  만들어준 환경설정 값은  getDefaultSharedPreferences 를   통해서 읽어 올 수 있답니다.

환경 설정도 하나의 activity  이기 때문에   메인에서 환경설정으로 가면,   메인의 화면을 가리게 되어서  OnPause 가 호출되고,

환경설정에서  돌아오면 때 (환경설정이 닫히면 ),   메인의  OnResume 이 호출 된답니다.

그러므로,  OnResume에서  환경설정에서 지정한 값을 읽어 오면 된답니다.


@Override
    protected void onResume() {
        super.onResume();
       
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
       
        boolean check_value =  pref.getBoolean("keycheck", false);
        String list_value = pref.getString("keylist", "");

       
        m_vt2.setText("List = " + list_value + ", check = " + check_value);
    }

위의 파란 글씨 부분이  환경 설정값을 가져오는 부분이랍니다.


이렇게  구성한 환경 설정을   프로그램을  종료했다가 다시 실행 하여도  유지가 된답니다.


수고하세요 ^^