*

【android】標準の設定画面を作る

公開日: : 最終更新日:2012/06/06 android

設定画面のテンプレートです。
検索一発クンのコードから抜粋しました。
チェックボックス、リスト、テキスト入力があります。

必要なファイル

  • values/string.xml
  • xml/pref.xml
  • MyPrefActivity.java

values/string.xml

<!-- EditText, CheckBox -->
<string name="pref_boot_overlay_title">オーバーレイを使用</string>
<string name="pref_boot_overlay_summary">どの画面からでもワンタッチで起動できます</string>

<!-- リスト -->
<string name="pref_boot_overlay_position_title">オーバーレイの位置</string>
<string name="pref_boot_overlay_position_summary">オーバーレイの位置</string>
<string name="pref_boot_overlay_position_dialogtitle">オーバーレイの位置</string>
<string-array name="pref_boot_overlay_position_entries">
    <item>左上</item>
    <item>左中央</item>
    <item>左下</item>
    <item>右上</item>
    <item>右中央</item>
    <item>右下</item>
</string-array>
<string-array name="pref_boot_overlay_position_values">
    <item>0</item>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</string-array>

xml/pref.xml

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

        <EditTextPreference
        	android:key="@string/prefkey_edit_favengine"
        	android:title="@string/pref_edit_favengine_title"
        	 />

        <CheckBoxPreference
        	android:key="@string/prefkey_overlay"
        	android:title="@string/pref_boot_overlay_title"
        	android:summary="@string/pref_boot_overlay_summary"
        	android:defaultValue="false"
        	 />
        <ListPreference
            android:key="@string/prefkey_searchbarPosition"
        	android:title="@string/pref_searchbar_position_title"
        	android:summary="@string/pref_searchbar_position_summary"
            android:dialogTitle="@string/pref_searchbar_position_title"
            android:entries="@array/pref_searchbar_position_entries"
            android:entryValues="@array/pref_searchbar_position_values"
        	android:defaultValue="1"
             />
         
    </PreferenceCategory>
    
</PreferenceScreen>

MyPrefActivity.java

public class MyPreferenceActivity extends PreferenceActivity{
	private final String TAG = MyPreferenceActivity.class.getSimpleName();
	
	//変更の有無を親Activityに伝えるintentのキー
	static public final String EXTRAKEY_CHANGE_FLAG = "changePref";

	//変更の有無を親Activityに伝える定数
	static public final int CHANGE_PREF_FAV_ENGINE = 1;
	static public final int CHANGE_PREF_SEARCHBAR_POSITION = 2;
	static public final int CHANGE_PREF_BOOT_STATUSBAR = 4;
	static public final int CHANGE_PREF_BOOT_OVERLAY = 8;
	
	//変更の有無を親Activityに伝える変数
	private int changeFlag = 0;
	
	SharedPreferences sp;//プリファレンス
	private final PreferenceActivity act = this;

	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		this.addPreferencesFromResource(R.xml.preferences);
		setResult(RESULT_OK);

		sp = PreferenceManager.getDefaultSharedPreferences(this);
		
		initEditFavEngine( R.string.prefkey_edit_favengine );
		initCbBootStatusbar( R.string.prefkey_dispOnStatusBar );
		initListSearchbarPosition( R.string.prefkey_searchbarPosition );
	}

	@Override
	public void onStart(){
		super.onStart();
		
		initCbOverlay( R.string.prefkey_overlay );
	}
	
	@Override
	public void onDestroy(){
		super.onDestroy();
		
		setResult();
		reflectSettings();
	}
	
	
	/****************************
	 * 初期化
	 *****************************/
	//リストの初期化
	private void initListSearchbarPosition(int resourceIdOfpreferenceKey){
		final ListPreference list = (ListPreference)findPreference(
				getResources().getString(resourceIdOfpreferenceKey)
				);
		
		//保存済みの設定をサマリーに表示
		list.setSummary( getSelectedListEntryName(list, list.getValue()) );

		//設定が変更された値をサマリーに表示する
		list.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
			public boolean onPreferenceChange(Preference preference, Object newValue) {
				//サマリの文字列を更新
				list.setSummary( getSelectedListEntryName(list, newValue) );
				
				//変更を記録
				changeFlag = changeFlag | CHANGE_PREF_SEARCHBAR_POSITION;

				return true;
			}
		});
	}
	
	//CheckBoxの初期化
	private void initCbOverlay(int resourceIdOfpreferenceKey){
		final CheckBoxPreference item = (CheckBoxPreference)findPreference(
				getResources().getString(resourceIdOfpreferenceKey)
				);
		
		item.setChecked( sp.getBoolean(getResources().getString(resourceIdOfpreferenceKey), false) );

		//変更のイベンとリスナ
		item.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
			public boolean onPreferenceChange(Preference preference, Object newValue) {
				startActivity( new Intent(act, MyPrefOverlayActivity.class) );

				//変更を記録
				changeFlag = changeFlag | CHANGE_PREF_BOOT_OVERLAY;

				return false;
			}
		});
	}
	
	/****************************
	 * ユーティリティ
	 *****************************/

	private CharSequence getSelectedListEntryName(ListPreference list, Object value){
		//選択されたリストエントリーの表示名を返す
		
		int selectedIndex = 0;		
		CharSequence[] values = list.getEntryValues();

		for(int i=0; i<values.length; ++i){
			if( values[i].equals( String.valueOf(value) ))selectedIndex = i;
		}
		
		return list.getEntries()[selectedIndex];
	}

	/****************************
	 * 終了処理
	 *****************************/

	//呼び出し元にデータを送る
	private void setResult(){
		Intent intent = new Intent();
		intent.putExtra(EXTRAKEY_CHANGE_FLAG, changeFlag);
		setResult(RESULT_OK, intent);
	}
	
	//設定を反映
	private void reflectSettings(){

		if( sp.getBoolean(this.getResources().getString(R.string.prefkey_overlay), true) ) {
		}else{
		}

	}
	
}// end of class

関連記事

no image

【android】サービスの実装

ダウンロードなどActivityに依存したくない大きなバックグラウンド処理や常駐プロセスを作りたい場

記事を読む

no image

【android】 年月だけのDatePicker

final DatePicker datePicker = new DatePicker(sel

記事を読む

no image

【android】ホーム画面や他のアプリの前面にViewを表示する。

WindowManagerのTYPE_SYSTEM_ALERTのレイヤーにViewを表示することで、

記事を読む

no image

[android] モンキーテスト(Monkey Test)を実行する

最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ

記事を読む

no image

【android】 webviewでassetsのリソースを使用する

webviewでassets内のリソースにアクセスするには file:///android_a

記事を読む

no image

【android】アプリのバージョン情報を取得する

int versionCode = -1; String versionName = &quo

記事を読む

no image

【android】 adbコマンド集

●adbサービス起動 adb start-server ●adbサービス終了 adb

記事を読む

no image

【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G

記事を読む

no image

【android】stringsリソースにパラメータを埋め込む

●strings.xml %n$x n : 引数に渡す際の順番。n番目の引数。 x

記事を読む

no image

【android】リソースからいろいろ取得する

リソースで定義したいろいろをコード内で呼び出す方法です。 レイアウト //リソースからレ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑