안드로이드(Android) EditTextPreference 이용해서 옵션값 셋팅하는 방법

 

환경 : Eclipse Mars, Android 4.2.2

 

안드로이드에서 제공하는 EditTextPreference 위젯을 사용해서 옵션값을 셋팅하고 그 값을 읽어들여서 메인페이지에 셋팅하는 샘플입니다. 옵션페이지는 PreferenceActivity 를 상속받아서 구현하며 CheckBoxPreference, EditTextPreference 두 가지를 이용하였습니다.

 

 

아래는 메인페이지입니다. 옵션페이지에서 셋팅한 값을 가져와서 어떻게 셋팅했는지 결과값을 읽어들여 표시하는 기능이 있습니다. 옵션페이지에서는 체크박스와 에디터박스 두개가 있습니다.

 

메인페이지 소스입니다. 옵션창에서 셋팅한후 메인 페이지로 돌아왔을 때 바로 반영하기 위해 onResume() 함수를 오버라이드해서 사용했습니다. PreferenceManager.getDefaultSharedPreferences 함수를 이용해서 SharedPreferences 객체를 리턴받아 key/value 로 저장된 옵션값을 꺼내와서 화면에 표시해 줍니다.

 

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.TextView;
import android.widget.Toast;

public class EditTextActivity extends Activity {

	TextView checkBoxStatus, editTextStatus;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_edit_text);

		Button buttonSetPreference = (Button) findViewById(R.id.setpreference);
		checkBoxStatus = (TextView) findViewById(R.id.checkboxstatus);
		editTextStatus = (TextView) findViewById(R.id.edittextstatus);

		buttonSetPreference
				.setOnClickListener(new Button.OnClickListener() {
					public void onClick(View arg0) {
						startActivity(new Intent(
								EditTextActivity.this,
								PreferenceSetting.class));
					}
				});
	}

	@Override
	protected void onResume() {
		super.onResume();
		Toast.makeText(this, "onResume", Toast.LENGTH_LONG).show();

		SharedPreferences prefer = PreferenceManager
				.getDefaultSharedPreferences(this);
		checkBoxStatus.setText("CheckBox 상태값 : "
				+ prefer.getBoolean("checkboxvalue", true));
		editTextStatus.setText("EditText 상태값 : "
				+ prefer.getString("edittexvalue", ""));
	}
}

 

아래 xml 소스는 메인페이지의 레이아웃입니다. 옵션창에서 읽어들인 값을 셋팅할 TextView 위젯이 추가 되어 있습니다.

 

<?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" />

    <TextView
        android:id="@+id/checkboxstatus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/edittextstatus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

두번째 페이지는 PreferenceActivity 클래스를 상속받아 구현한 페이지 입니다. Xml CheckBoxPreference, EditTextPreference 위젯만 추가하면 별다른 구현없이 아래 그림과 같이 셋팅이 됩니다 

 

EditTextPreference 위젯은 클릭하게 되면 값을 입력할수 있는 에디터박스가 뜨게 됩니다. 어렵게 다이얼로그 박스를 구현하지 않아도 됩니다. 값을 입력하고 OK 를 누르게 되면 xml 에 값이 저장됩니다.

 

옵션 페이지를 구현한 activity 소스입니다. Xml 파일을 읽어들일 때 트랜젝션 문제가 있을수 있으므로 onCreate addPreferencesFromResource() 함수를 사용할수 없습니다. 별도로 PreferenceFragment 를 상속받아서 MyPreferenceFragment 클래스를 만들었습니다. 

 

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_edittext);
		}
	}
}

 

아래는 옵션화면에서 사용한 xml 소스 입니다. 이번예제에서는 두 개의 위젯이 들어가 있습니다. EditTextPreference 같은 경우 추가만 해두면 별도의 구현없이 EditText 다이얼로그를 사용해서 데이터를 저장할 수 있습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="checkboxvalue"
        android:summary="CheckBoxPreference"
        android:title="Checkbox" />

    <EditTextPreference
        android:key="edittexvalue"
        android:summary="EditTextPreference"
        android:title="EditText" />

</PreferenceScreen>
Posted by 녹두장군