안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기 |
환경 : Eclipse Mars, Android 4.2.2 |
안드로이드에서는 셋팅정보를 쉽게 저장하고 관리할수 있는 Preference 기능이 있습니다. DB 에 저장하는 것이 아니라 안드로이드에서 제공하는 별도의 공간에 저장되는 것이죠. 처리방식은 xml 로 관리하며 파일로 저장됩니다. 그리고 HashMap 처럼 key - value 의 쌍으로 저장됩니다.
▼ 이번에 개발할 예제는 PreferenceActivity 를 이용해서 클래스를 만듭니다. 그리고 안드로이드에서 제공하는 Preference 위젯중 CheckBoxPreference 를 추가해서 옵션 페이지를 만듭니다. 옵션페이지에서 체크한 결과값을 메인페이지에서 가져와 동일하게 셋팅할 것입니다.
▼ Preference 에 사용할 XML 을 만들기 위해 오른마우스를 누릅니다. 그리고 [Android XML file] 을 선택합니다. 그럼 xml 리소스를 만들수 있는 위자드가 시작됩니다.
▼ xml작성을 위한 대화상자 첫번째 화면에서 Resource Type 을 Preference 로 선택합니다. 그럼 추가할수 있는 요소들이 나오게 됩니다. 그중 PreferenceScreen 을 선택합니다. 옵션화면을 구성할 때 가장 많이 쓰이는 요소 입니다.
1. PreferenceActivity 클래스 만들기 |
▼ PreferenceActivity 를 이용해서 만든 클래스 입니다. PreferenceActivity 에서는 addPreferencesFromResource 함수를 사용해서 옵션으로 사용할 xml 파일을 추가할수 없습니다. 그래서 PreferenceFragment 클래스를 상속해서 만든 클래스에 xml 을 추가해서 만든후 onCreate 에서 사용합니다.
import android.os.Bundle; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; public class PreferenceSetting extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager() .beginTransaction() .replace(android.R.id.content, new MyPreferenceFragment()).commit(); } // PreferenceFragment 클래스 사용 public static class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.setting_default); } } }
▼ PreferenceActivity 에서 사용하는 xml 의 내용입니다. 여기에서는 CheckBoxPreference 를 사용하였습니다.
setting_default.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <CheckBoxPreference android:defaultValue="true" android:key="checkbox" android:summary="@string/opt_setting" android:title="Checkbox" /> </PreferenceScreen>
2. MainActivity 클래스 만들기 |
▼ 이제 PreferenceActivity 를 상속받아 만든 클래스를 사용하는 메인화면 소스입니다. 메인화면에 보시면 버튼이 하나 있는데 클릭하시면 옵션 셋팅 화면으로 이동합니다. 그리고 onResume() 함수에서는 PreferenceActivity 에서 xml 에 저장한 값을 SharedPreferences 이용해서 가져온 후 메인화면에 있는 체크박스에 셋팅합니다. 그럼 옵션화면에서 저장한 값과 동일한 결과를 보여주게 되겠죠.
import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.Toast; public class MainActivity extends Activity { private CheckBox checkBox; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnRefer = (Button) findViewById(R.id.setpreference); checkBox = (CheckBox) findViewById(R.id.checkbox); btnRefer.setOnClickListener(new Button.OnClickListener() { public void onClick(View arg0) { startActivity(new Intent(MainActivity.this, PreferenceSetting.class)); } }); } @Override protected void onResume() { super.onResume(); Toast.makeText(this, "onResume", Toast.LENGTH_LONG).show(); SharedPreferences setRefer = PreferenceManager .getDefaultSharedPreferences(this); checkBox.setChecked(setRefer.getBoolean("checkbox", true)); } }
▼ 메인 activity 에 쓰인 전체 xml 소스 입니다. 버튼은 옵션셋팅화면으로 이동하는데 쓰이며 CheckBox 는 옵션에서 셋팅한 결과와 동일하게 셋팅하기 위한 컨트롤 입니다.
activity_main.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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:background="#3F0099" android:paddingBottom="@dimen/abc_action_bar_icon_vertical_padding" android:paddingTop="@dimen/abc_action_bar_icon_vertical_padding" android:text="@string/hello" android:textColor="#FFFFFF" /> <Button android:id="@+id/setpreference" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_setprefer" /> <CheckBox android:id="@+id/checkbox" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/chk_setting" /> </LinearLayout>
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) Genymotion 지니모션 설치와 이클립스 플러그인 설치해서 연결 (1) | 2015.05.19 |
---|---|
[Android] 안드로이드 레이아웃 gravity, layout_gravity 가 적용이 안되는 경우 해결 (0) | 2015.05.15 |
안드로이드(Android) PreferenceActivity 에서 addPreferenceFromResource (0) | 2015.04.29 |
안드로이드(Android) EditTextPreference 이용해서 옵션값 셋팅하는 방법 (1) | 2015.04.20 |
안드로이드(Android) 스마트폰 맥주소(Mac Address) 확인하는 방법 (1) | 2015.03.09 |
안드로이드(Android) GPS 로 현재 이동 속도 알아오기 (5) | 2015.03.05 |
안드로이드(Android) Thread 를 이용해 로딩페이지 만들기 (2) | 2015.02.23 |
안드로이드(Android) GPS LocationListener 이용해서 도시이름 가져오기 (0) | 2015.02.12 |