【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
関連記事
-
-
[android] JSONのパースにかかる時間
リストデータなんかを保存したいというのはよくある要件だと思います。 DBは面倒だしカラム毎に集計す
-
-
【android】 adbコマンド集
●adbサービス起動 adb start-server ●adbサービス終了 adb
-
-
[android] ActivityとFragmentのライフサイクルいろいろ
Fragmentを使い始めてライフサイクル関係でハマることがあったので備忘録。 FragmentA
-
-
【android】ハードウェアキー入力を検出する
Activityを継承したクラスで下記を記述します。 public boolean
-
-
[android] モンキーテスト(Monkey Test)を実行する
最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ
-
-
アプリ間連携 Intentfiler
ブラウザの共有からURLを受け取る。 Manifest.xmlのURL受け取り先のactivity
-
-
【android】アプリのバージョン情報を取得する
int versionCode = -1; String versionName = &quo
-
-
【android】バイブレーションを使う
必要なファイル MyApp.manifest MyApp.java MyApp.m
-
-
【android】Activityとプロセスのライフサイクル
またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G
-
-
【android】DrawableとBitmap、リソースの相互変換
Resource → Bitmap Bitmap bm = BitmapFactory.dec