【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】アプリ内課金を実装する
アプリ内課金のサンプルコードを解析します。 参考URL 公式API Android
-
【android】ネットワークの接続状況を確認する
コードから接続状況を確認。 ConnectivityManager co
-
【android】オーバーレイでトップレイヤーにViewを表示する
常にホーム画面や他のアプリより前面にViewを表示する方法です。 前面に透明のViewGroupを
-
アプリ間連携 Intentfiler
ブラウザの共有からURLを受け取る。 Manifest.xmlのURL受け取り先のactivity
-
[android] モンキーテスト(Monkey Test)を実行する
最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ
-
【android】設定画面の作成
res/xml/preferences.xml <?xml version=&quo
-
【android】IMEの表示/非表示
//IMEを閉じる InputMethodManager inputMethodManager
-
【android】任意のスレッドで処理を行う
非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次
-
【android】 webviewでassetsのリソースを使用する
webviewでassets内のリソースにアクセスするには file:///android_a
-
【android】 APIバージョンによる動作の違い
「最近使用したアプリケーション」からの起動 2.x系 -> onNewIntentが呼ばれる 4