Android開発 虎の巻

プリファレンス

■プリファレンスとは?

設定値の保存。キーと値のペアで保存される。
実態は xmlファイルで /data/data/(パッケージ名)/shared_pref に保存される。

■プリファレンスオブジェクトの取得

SharedPreferences sp = getPreferences(モード);

または

SharedPreferences sp = getSharedPreferences(ファイル名,モード);

getPreferencesは(アクティヴィティ名).xml になる。

モードは以下を指定

MODE_PRIVATEこのアプリだけで使用可能
MODE_WORLD_READABLE他のアプリから読み取り可能
MODE_WORLD_WRITEABLE他のアプリから書込み可能

■データの保存

保存はプリファレンスオブジェクトからEditorクラスを取得し、 putXXX系(XXXはデータ型)のメソッドでデータを指定した後、commitメソッドで保存する。

		SharedPreferences sp = getPreferences(MODE_PRIVATE);
		
		Editor editor = sp.edit();
		
		editor.putString("test", str);	//	キー、値
		
		editor.commit();

putString、putBoolean、putFloat、putInt、putLong が使用できる。

■データの読み込み

読み込みはプリファレンスオブジェクトのgetXXX系(XXXはデータ型)のメソッドでキーを指定する。

		SharedPreferences sp = getSharedPreferences("pref",MODE_PRIVATE);

		String str = sp.getString("test", "");	//	キー、デフォールト値

■Preference用のActivity

設定保存用のActivity。まずはxmlを作成。
[File]-[New]-[Other]で「Android」の「Android XML File」から「ResourceType」を「Preference」にする。
「RootElement」は「PreferenceScreen」を選択していることを確認し、ファイル名は「pref.xml」などを入力
「finish」を推すことで/res/xml にファイルが作られる。

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:key="user_name" android:title="お名前" /> </PreferenceScreen>

Activityを新たに追加(例:PrefActivity)。その中でPreferenceFragmentを継承したクラスを作りxmlを読み込む。そのFragmentを画面に設定する。

public class PrefActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//setContentView(R.layout.activity_pref);
		getFragmentManager()
		.beginTransaction()
		.replace(android.R.id.content,new PrefFragment())
		.commit();
	}
	public static class PrefFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.pref);
        }
    }
}

他クラスでデータの読み込み

		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		String uname = sp.getString("user_name", "");

xmlの属性

android:summary説明文
android:dialogTitleダイアログタイトル
android:inputType入力形式(例:number)
android:defaultValue初期値

そのほかのタグ

カテゴリ

PreferenceCategory タグで囲む。android:title属性にタイトル入力。 例: <PreferenceCategory android:title="連絡先"> <EditTextPreference android:key="user_name" android:title="お名前" /> <EditTextPreference android:key="user_mail" android:title="メールアドレス" /> </PreferenceCategory>

チェックボックス

CheckBoxPreference。android:defaultValueを trueにすることでチェック済みに。

リストボックス

ListPreference

pref.xml内

android:entries選択肢として表示される文字列の配列。例:@array/list_entries
android:entryValues選択肢を選んだとき保存される文字列の配列。例:@array/list_values

strings.xml内の例

<string-array name="list_entries"> <item>HTMLメール</item> <item>テキストメール</item> <item>両方</item> </string-array> <string-array name="list_values"> <item>0</item> <item>1</item> <item>2</item> </string-array>

インテントの利用

例: <Preference android:title="Webを開く" > <intent android:action="android.intent.action.VIEW" android:data="http://www.yahoo.co.jp" /> </Preference>

変更時のリスナー設定

	
	CheckBoxPreference cbp = (CheckBoxPreference)findPreference("user_check");	//	キー名で取得

	cbp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
		@Override
		public boolean onPreferenceChange(Preference preference, Object newValue) {
			String summary;
			if ((Boolean)newValue) {
				summary = "チェック済み";
			} else {
				summary = "未チェック";
			}
			preference.setSummary(summary);

			return true;	//	更新の適用
		}
	});
Android開発 虎の巻