출처 : http://www.androidpub.com/57847


안녕하세요.  

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

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

"알짜만 골라 배우는 안드로이드 프로그래밍" 책은  이 부분을 잘 설명하고 있는데요. 
"프로페셔널  안드로이드 개발"은   그냥 보통의  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);
    }

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


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


수고하세요 ^^

+ Recent posts