*

【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】IMEの表示/非表示

//IMEを閉じる InputMethodManager inputMethodManager

記事を読む

no image

【android】処理時間を計測する

パフォーマンスのリファクタリングを行うには処理時間の計測がかかせません。 SDK標準のクラスを使っ

記事を読む

no image

【android】アニメーション

Viewにアニメーションを付加する方法です。 目次 アニメーションの実行 de

記事を読む

no image

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

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

記事を読む

no image

【andoid】ViewPagerを使う

1. layout.xmlにViewPagerを配置  2. PagerAdapter.jav

記事を読む

no image

[android] ActivityとFragmentのライフサイクルいろいろ

Fragmentを使い始めてライフサイクル関係でハマることがあったので備忘録。 FragmentA

記事を読む

no image

【android】 年月だけのDatePicker

final DatePicker datePicker = new DatePicker(sel

記事を読む

no image

【android】複数のカスタムテーマを設定で切り替える

背景色やアプリ全体のテーマ色を設定で変更したいという要望をもらったので実装してみました。

記事を読む

no image

【android】リスト項目のmatch_parentが効かない

下記のようなリスト項目用のレイアウトを用意して、リストの右端にチェックボックスを置くようにしたのです

記事を読む

no image

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

int versionCode = -1; String versionName = &quo

記事を読む

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 ↑