ListPreference を使ってみた

ListPreference は
java.lang.Object
  ↳ android.preference.Preference
    ↳ android.preference.DialogPreference
      ↳ android.preference.ListPreference
を使います

List の Dialog を表示させる Preference の一つで
String型の値を SharedPreferences に保存します

というわけで,ListPreference をいじってみた

サンプルコード
  1. public class EditTextPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     // addPreferencesFromResource(R.xml.edittext_preference);  
  6.   
  7.     PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);  
  8.   
  9.     PreferenceCategory pc = new PreferenceCategory(this);  
  10.     pc.setTitle(R.string.title_category);  
  11.     ps.addPreference(pc);  
  12.   
  13.     EditTextPreference editTextPreference = new EditTextPreference(this);  
  14.     editTextPreference.setKey(getString(R.string.key_edittext_preference));  
  15.     editTextPreference.setTitle(R.string.title_edittext_preference);  
  16.     editTextPreference.setSummary(R.string.summary_edittext_preference);  
  17.     editTextPreference.setDialogTitle(R.string.dialog_title_edittext_preference);  
  18.     editTextPreference.setDialogMessage(R.string.dialog_message_edittext_preference);  
  19.   
  20.     pc.addPreference(editTextPreference);  
  21.     setPreferenceScreen(ps);  
  22.   }  
  23. }  

プログラムを実行すると...



こんな感じ!

XML で一括で作成することもできます

サンプルコード
  1. public class ListPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     // XML で Preference を設定  
  6.     addPreferencesFromResource(R.xml.list_preference);  
  7.   
  8.     // ListPreference の取得  
  9.     ListPreference listPreferrence =   
  10.       (ListPreference) findPreference(  
  11.           getString(R.string.key_list_preference));  
  12.   }    
  13. }  

List_preference.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen   
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   <PreferenceCategory   
  5.     android:title="@string/title_category">  
  6.     <ListPreference   
  7.       android:key="@string/key_list_preference"  
  8.       android:title="@string/title_list_preference"   
  9.       android:summaryOn="@string/summary_list_preference"  
  10.       android:entries="@array/entries_list_preference"   
  11.       android:entryValues="@array/entryvalues_list_preference"  
  12.       android:dialogTitle="@string/dialog_title_list_preference" />  
  13.   </PreferenceCategory>  
  14. </PreferenceScreen>  


参考サイト
http://developer.android.com/intl/ja/reference/android/preference/ListPreference.html

EditTextPreference を使ってみた

EditTextPreference は
java.lang.Object
  ↳ android.preference.Preference
    ↳ android.preference.DialogPreference
      ↳ android.preference.EditTextPreference
を使います

EditText を Dialog 上で表示させる Preference の一つで
String型の値を SharedPreferences に保存します

というわけで,EditTextPreference をいじってみた

サンプルコード
  1. public class EditTextPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.   
  6.     PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);  
  7.   
  8.     PreferenceCategory pc = new PreferenceCategory(this);  
  9.     pc.setTitle(R.string.title_category);  
  10.     ps.addPreference(pc);  
  11.   
  12.     EditTextPreference editTextPreference = new EditTextPreference(this);  
  13.     editTextPreference.setKey(getString(R.string.key_edittext_preference));  
  14.     editTextPreference.setTitle(R.string.title_edittext_preference);  
  15.     editTextPreference.setSummary(R.string.summary_edittext_preference);  
  16.     editTextPreference.setDialogTitle(R.string.dialog_title_edittext_preference);  
  17.     editTextPreference.setDialogMessage(R.string.dialog_message_edittext_preference);  
  18.   
  19.     pc.addPreference(editTextPreference);  
  20.     setPreferenceScreen(ps);  
  21.   }  
  22. }  

プログラムを実行すると...



こんな感じ!

XML で一括で作成することもできます

サンプルコード
  1. public class EditTextPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     // XML で Preference を設定  
  6.     addPreferencesFromResource(R.xml.edittext_preference);  
  7.   
  8.     // EditTextPreference の取得  
  9.     EditTextPreference editTextPreferrence =   
  10.       (EditTextPreference) findPreference(  
  11.           getString(R.string.key_edittext_preference));  
  12.   }    
  13. }  

edittext_preference.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen   
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   <PreferenceCategory   
  5.     android:title="@string/title_category">  
  6.     <EditTextPreference   
  7.       android:key="@string/key_edittext_preference"  
  8.       android:title="@string/title_edittext_preference"   
  9.       android:summary="@string/summary_edittext_preference"  
  10.       android:dialogTitle="@string/dialog_title_edittext_preference" />  
  11.   </PreferenceCategory>  
  12. </PreferenceScreen>  


参考サイト
http://developer.android.com/intl/ja/reference/android/preference/EditTextPreference.html

CheckBoxPreference を使ってみた

CheckBoxPreference は
java.lang.Object
  ↳ android.preference.Preference
    ↳ android.preference.CheckBoxPreference
を使います

checkbox の機能を持つ Preference の一つで
boolean型の値を SharedPreferences に保存します

というわけで,CheckBoxPreference をいじってみた

サンプルコード
  1. public class CheckBoxPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.       
  6.     CheckBoxPreference checkBoxPreference = new CheckBoxPreference(this);  
  7.   
  8.     // Key の設定  
  9.     checkBoxPreference.setKey(getString(R.string.key_checkbox_preference));  
  10.     // Title の設定  
  11.     checkBoxPreference.setTitle(R.string.title_checkbox_preference);  
  12.   
  13.     // サマリーを設定  
  14.     //checkBoxPreference.setSummary(R.string.summary_checkbox_preference);  
  15.     // CheckBox が On の時のサマリーを設定  
  16.     checkBoxPreference.setSummaryOn("Summary On");  
  17.     // CheckBox が Off の時のサマリーを設定  
  18.     checkBoxPreference.setSummaryOff("Summary Off");  
  19.   
  20.     // PrefenceScreen & PreferenceCategory  
  21.     PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);  
  22.     PreferenceCategory pc = new PreferenceCategory(this);  
  23.     // PreferenceCategory のタイトルを設定  
  24.     pc.setTitle(R.string.title_category);  
  25.     // PreferenceCategory を PreferenceScreen に追加  
  26.     ps.addPreference(pc);  
  27.     // Preference を PreferenceCategory に追加  
  28.     pc.addPreference(checkBoxPreference);  
  29.     // PreferenceScrren の設定  
  30.     setPreferenceScreen(ps);  
  31.   
  32.     // Preference がチェックされているか  
  33.     checkBoxPreference.isChecked();  
  34.     // チェック状態を変更  
  35.     //checkBoxPreference.setChecked(true);  
  36.   
  37.     // Preference が変更されたときに呼び出されるコールバックの登録  
  38.     checkBoxPreference.setOnPreferenceChangeListener(  
  39.         new OnPreferenceChangeListener() {  
  40.           @Override  
  41.           public boolean onPreferenceChange(  
  42.               Preference preference,  
  43.               Object newValue) {  
  44.             // Preference が変更されたときの動作  
  45.             return true;  
  46.           }      
  47.         });  
  48.   }    
  49. }  

プログラムを実行すると...



こんな感じ!

XML で一括で作成することもできます

サンプルコード
  1. public class CheckBoxPreferenceSample extends PreferenceActivity {  
  2.   @Override  
  3.   public void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     // XML で Preference を設定  
  6.     addPreferencesFromResource(R.xml.checkbox_preference);  
  7.   
  8.     // CheckBoxPreference の取得  
  9.     CheckBoxPreference checkBoxPreferrence =   
  10.       (CheckBoxPreference) findPreference(  
  11.           getString(R.string.key_checkbox_preference));  
  12.   }    
  13. }  

checkbox_preference.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen   
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   <PreferenceCategory   
  5.     android:title="@string/title_category">  
  6.     <CheckBoxPreference   
  7.       android:key="@string/key_checkbox_preference"  
  8.       android:title="@string/title_checkbox_preference"   
  9.       android:summaryOn="@string/summary_on_checkbox_preference"  
  10.       android:summaryOff="@string/summary_off_checkbox_preference" />  
  11.       <!-- android:summary="@string/summary_checkbox_preference" -->  
  12.   </PreferenceCategory>  
  13. </PreferenceScreen>  


参考サイト
http://developer.android.com/intl/ja/reference/android/preference/CheckBoxPreference.html

SharedPreferences を使ってみた

Preference は Androidアプリでデータを保存する方法のひとつ
データをキーと値の組み合わせで保存します.

ファイルなどに保存するよりも非常に簡単にデータを保存できます

今回は SharedPreferences を...

SharedPreferences はまず
getSharedPreferences(String name, int mode);
でを取得してきます
name は Preference 自体の名前を指定します
mode には
  • Activity.MODE_PRIVATE
  • Activity.MODE_WORLD_READABLE
  • Activity.MODE_WORLD_WRITEABLE
などを指定します.

保存された Preference は data/data/パッケージ名/shared_prefs
の中に xmlファイルとして保存されるようです

取得する時は
  • getString(String key, String defValue);
  • getInt(String key, int defValue);
  • getLong(String key, long defValue);
  • ...
などを使って取得して着ます

というわけで,Preference を使ってみた

サンプルコード
  1. public class PreferencesTest extends Activity implements OnClickListener {  
  2.   private static final String PREF_KEY = "preferenceTest";  
  3.   private static final String KEY_TEXT = "text";  
  4.   
  5.   SharedPreferences pref;  
  6.   SharedPreferences.Editor editor;  
  7.   
  8.   EditText mEditText;  
  9.     
  10.   @Override  
  11.   public void onCreate(Bundle savedInstanceState) {  
  12.     super.onCreate(savedInstanceState);  
  13.     setContentView(R.layout.preferencestest);  
  14.   
  15.     // SharedPrefernces の取得  
  16.     pref = getSharedPreferences(PREF_KEY, Activity.MODE_PRIVATE);  
  17.   
  18.     mEditText = (EditText) findViewById(R.id.EditText);  
  19.   
  20.     Button button;  
  21.     button = (Button) findViewById(R.id.Button);  
  22.     button.setOnClickListener(this);  
  23.       
  24.     TextView textView;  
  25.     textView = (TextView) findViewById(R.id.TextView);  
  26.     // SharedPreferences よりデータを取得  
  27.     textView.setText(pref.getString(KEY_TEXT, "No Data"));  
  28.   }  
  29.   
  30.   public void onClick(View v) {  
  31.     if (v.getId() == R.id.Button) {  
  32.       // Editor の設定  
  33.       editor = pref.edit();  
  34.       // Editor に値を代入  
  35.       editor.putString(  
  36.           KEY_TEXT,  
  37.           mEditText.getText().toString()  
  38.       );  
  39.       // データの保存  
  40.       editor.commit();  
  41.     }  
  42.   }  
  43. }  

プログラムを実行すると...

保存して...

再び起動

こんな感じ!

ちなみに保存された Preference は
preferencetest.xml
  1. <map>  
  2. <string name="text">Test</string>  
  3. </map>  


参考サイト
http://developer.android.com/intl/ja/reference/android/content/SharedPreferences.html

Wallpaper を替えてみた

壁紙を替えるには WallpaperManager を使用します

替え方は
  • setBitmap(Bitmap bitmap)
  • setResource(int resid)
  • setStream(InputStream data)
の三つから指定します

まず AndroidManifest でパーミッションを設定する必要があります

AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.   ... >  
  4.     ・  
  5.     ・  
  6.     ・  
  7.   <uses-permission   
  8.     android:name="android.permission.SET_WALLPAPER" />  
  9. </manifest>  

サンプルコード
  1. public class WallpaperSample extends Activity implements OnClickListener {  
  2.   WallpaperManager mWM;  
  3.   
  4.   @Override  
  5.   public void onCreate(Bundle savedInstanceState) {  
  6.     super.onCreate(savedInstanceState);  
  7.     setContentView(R.layout.wallpaper_sample);  
  8.   
  9.     Button button;  
  10.     button = (Button) findViewById(R.id.Button_Set);  
  11.     button.setOnClickListener(this);  
  12.     button = (Button) findViewById(R.id.Button_Clear);  
  13.     button.setOnClickListener(this);  
  14.   
  15.     // WindowManager の取得  
  16.     mWM = WallpaperManager.getInstance(this);  
  17.   
  18.     // 壁紙の最小の幅,最小の高さの取得  
  19.     int width = mWM.getDesiredMinimumWidth();  
  20.     int height = mWM.getDesiredMinimumHeight();  
  21.   }  
  22.   
  23.   @Override  
  24.   public void onClick(View v) {  
  25.     switch(v.getId()) {  
  26.     case R.id.Button_Set:  
  27.       try {  
  28.         // 壁紙をリソースから設定  
  29.         mWM.setResource(R.drawable.icon);  
  30.       } catch (IOException e) {  
  31.         e.printStackTrace();  
  32.       }  
  33.       break;  
  34.     case R.id.Button_Clear:  
  35.       try {  
  36.         // 壁紙をデフォルトに戻す  
  37.         mWM.clear();  
  38.       } catch (IOException e) {  
  39.         e.printStackTrace();  
  40.       }  
  41.       break;  
  42.     }  
  43.   }  
  44. }  

プログラムを実行すると...

変更前
変更後

こんな感じ!

Activity の背景を壁紙にしたいときは
  1. <activity   
  2.   android:name=".activity.WallpaperSample"  
  3.   android:theme="@android:style/Theme.Wallpaper">  
とテーマを指定すればOK

ちなみに
API 2.0以前ではできないので注意!
下記の方法で設定するようです
int width = getWallpaperDesiredMinimumWidth();
int height = getWallpaperDesiredMinimumHeight();
setWallpaper(Bitmap or InputStream);
clearWallpaper();


参考サイト
http://developer.android.com/intl/ja/reference/android/app/WallpaperManager.html