ListPreference を使ってみた

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

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

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

サンプルコード
public class EditTextPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // addPreferencesFromResource(R.xml.edittext_preference);

    PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);

    PreferenceCategory pc = new PreferenceCategory(this);
    pc.setTitle(R.string.title_category);
    ps.addPreference(pc);

    EditTextPreference editTextPreference = new EditTextPreference(this);
    editTextPreference.setKey(getString(R.string.key_edittext_preference));
    editTextPreference.setTitle(R.string.title_edittext_preference);
    editTextPreference.setSummary(R.string.summary_edittext_preference);
    editTextPreference.setDialogTitle(R.string.dialog_title_edittext_preference);
    editTextPreference.setDialogMessage(R.string.dialog_message_edittext_preference);

    pc.addPreference(editTextPreference);
    setPreferenceScreen(ps);
  }
}

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



こんな感じ!

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

サンプルコード
public class ListPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // XML で Preference を設定
    addPreferencesFromResource(R.xml.list_preference);

    // ListPreference の取得
    ListPreference listPreferrence = 
      (ListPreference) findPreference(
          getString(R.string.key_list_preference));
  }  
}

List_preference.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory 
    android:title="@string/title_category">
    <ListPreference 
      android:key="@string/key_list_preference"
      android:title="@string/title_list_preference" 
      android:summaryOn="@string/summary_list_preference"
      android:entries="@array/entries_list_preference" 
      android:entryValues="@array/entryvalues_list_preference"
      android:dialogTitle="@string/dialog_title_list_preference" />
  </PreferenceCategory>
</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 をいじってみた

サンプルコード
public class EditTextPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);

    PreferenceCategory pc = new PreferenceCategory(this);
    pc.setTitle(R.string.title_category);
    ps.addPreference(pc);

    EditTextPreference editTextPreference = new EditTextPreference(this);
    editTextPreference.setKey(getString(R.string.key_edittext_preference));
    editTextPreference.setTitle(R.string.title_edittext_preference);
    editTextPreference.setSummary(R.string.summary_edittext_preference);
    editTextPreference.setDialogTitle(R.string.dialog_title_edittext_preference);
    editTextPreference.setDialogMessage(R.string.dialog_message_edittext_preference);

    pc.addPreference(editTextPreference);
    setPreferenceScreen(ps);
  }
}

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



こんな感じ!

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

サンプルコード
public class EditTextPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // XML で Preference を設定
    addPreferencesFromResource(R.xml.edittext_preference);

    // EditTextPreference の取得
    EditTextPreference editTextPreferrence = 
      (EditTextPreference) findPreference(
          getString(R.string.key_edittext_preference));
  }  
}

edittext_preference.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory 
    android:title="@string/title_category">
    <EditTextPreference 
      android:key="@string/key_edittext_preference"
      android:title="@string/title_edittext_preference" 
      android:summary="@string/summary_edittext_preference"
      android:dialogTitle="@string/dialog_title_edittext_preference" />
  </PreferenceCategory>
</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 をいじってみた

サンプルコード
public class CheckBoxPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    CheckBoxPreference checkBoxPreference = new CheckBoxPreference(this);

    // Key の設定
    checkBoxPreference.setKey(getString(R.string.key_checkbox_preference));
    // Title の設定
    checkBoxPreference.setTitle(R.string.title_checkbox_preference);

    // サマリーを設定
    //checkBoxPreference.setSummary(R.string.summary_checkbox_preference);
    // CheckBox が On の時のサマリーを設定
    checkBoxPreference.setSummaryOn("Summary On");
    // CheckBox が Off の時のサマリーを設定
    checkBoxPreference.setSummaryOff("Summary Off");

    // PrefenceScreen & PreferenceCategory
    PreferenceScreen ps = getPreferenceManager().createPreferenceScreen(this);
    PreferenceCategory pc = new PreferenceCategory(this);
    // PreferenceCategory のタイトルを設定
    pc.setTitle(R.string.title_category);
    // PreferenceCategory を PreferenceScreen に追加
    ps.addPreference(pc);
    // Preference を PreferenceCategory に追加
    pc.addPreference(checkBoxPreference);
    // PreferenceScrren の設定
    setPreferenceScreen(ps);

    // Preference がチェックされているか
    checkBoxPreference.isChecked();
    // チェック状態を変更
    //checkBoxPreference.setChecked(true);

    // Preference が変更されたときに呼び出されるコールバックの登録
    checkBoxPreference.setOnPreferenceChangeListener(
        new OnPreferenceChangeListener() {
          @Override
          public boolean onPreferenceChange(
              Preference preference,
              Object newValue) {
            // Preference が変更されたときの動作
            return true;
          }    
        });
  }  
}

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



こんな感じ!

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

サンプルコード
public class CheckBoxPreferenceSample extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // XML で Preference を設定
    addPreferencesFromResource(R.xml.checkbox_preference);

    // CheckBoxPreference の取得
    CheckBoxPreference checkBoxPreferrence = 
      (CheckBoxPreference) findPreference(
          getString(R.string.key_checkbox_preference));
  }  
}

checkbox_preference.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory 
    android:title="@string/title_category">
    <CheckBoxPreference 
      android:key="@string/key_checkbox_preference"
      android:title="@string/title_checkbox_preference" 
      android:summaryOn="@string/summary_on_checkbox_preference"
      android:summaryOff="@string/summary_off_checkbox_preference" />
      <!-- android:summary="@string/summary_checkbox_preference" -->
  </PreferenceCategory>
</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 を使ってみた

サンプルコード
public class PreferencesTest extends Activity implements OnClickListener {
  private static final String PREF_KEY = "preferenceTest";
  private static final String KEY_TEXT = "text";

  SharedPreferences pref;
  SharedPreferences.Editor editor;

  EditText mEditText;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.preferencestest);

    // SharedPrefernces の取得
    pref = getSharedPreferences(PREF_KEY, Activity.MODE_PRIVATE);

    mEditText = (EditText) findViewById(R.id.EditText);

    Button button;
    button = (Button) findViewById(R.id.Button);
    button.setOnClickListener(this);
    
    TextView textView;
    textView = (TextView) findViewById(R.id.TextView);
    // SharedPreferences よりデータを取得
    textView.setText(pref.getString(KEY_TEXT, "No Data"));
  }

  public void onClick(View v) {
    if (v.getId() == R.id.Button) {
      // Editor の設定
      editor = pref.edit();
      // Editor に値を代入
      editor.putString(
          KEY_TEXT,
          mEditText.getText().toString()
      );
      // データの保存
      editor.commit();
    }
  }
}

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

保存して...

再び起動

こんな感じ!

ちなみに保存された Preference は
preferencetest.xml
<map>
<string name="text">Test</string>
</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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  ... >
    ・
    ・
    ・
  <uses-permission 
    android:name="android.permission.SET_WALLPAPER" />
</manifest>

サンプルコード
public class WallpaperSample extends Activity implements OnClickListener {
  WallpaperManager mWM;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.wallpaper_sample);

    Button button;
    button = (Button) findViewById(R.id.Button_Set);
    button.setOnClickListener(this);
    button = (Button) findViewById(R.id.Button_Clear);
    button.setOnClickListener(this);

    // WindowManager の取得
    mWM = WallpaperManager.getInstance(this);

    // 壁紙の最小の幅,最小の高さの取得
    int width = mWM.getDesiredMinimumWidth();
    int height = mWM.getDesiredMinimumHeight();
  }

  @Override
  public void onClick(View v) {
    switch(v.getId()) {
    case R.id.Button_Set:
      try {
        // 壁紙をリソースから設定
        mWM.setResource(R.drawable.icon);
      } catch (IOException e) {
        e.printStackTrace();
      }
      break;
    case R.id.Button_Clear:
      try {
        // 壁紙をデフォルトに戻す
        mWM.clear();
      } catch (IOException e) {
        e.printStackTrace();
      }
      break;
    }
  }
}

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

変更前
変更後

こんな感じ!

Activity の背景を壁紙にしたいときは
<activity 
  android:name=".activity.WallpaperSample"
  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