settingsActivityのメモ
settingsActivityを使ってみたので、
設定を伴わないライブ壁紙からの差分ということでメモ。
いつものライブ壁紙のコードを改良していきます。
まずは、ファイルの先頭に。
import android.content.SharedPreferences;
次に、設定の保存先を定義。
public class LifeGameWallpaper extends WallpaperService { // 他のアプリとかぶらないようなのを使用する public static final String SHARED_PREFS_NAME = "your.domain.preferencesName"; // 以下は、今まで通り
次に、ライブ壁紙エンジンのクラスに、
設定値の変更イベントを受け取るためのインターフェイスを追加。
class LifeGameWallpaperEngine extends Engine implements SharedPreferences.OnSharedPreferenceChangeListener { // 今回は、この値を変更できるようにする private final long _drawInterval = 1000 / 8; // 描画間隔 // ここは今まで通り // 以下を追加 private SharedPreferences _prefs;
コンストラクタの中で、初回設定値読み出し。
_prefs = LifeGameWallpaper.this.getSharedPreferences( SHARED_PREFS_NAME, 0 ); _prefs.registerOnSharedPreferenceChangeListener( this ); onSharedPreferenceChanged( _prefs, null )
onSharedPreferenceChangedという関数を追加
public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { if ( sharedPreferences.getBoolean("speed", false) ) { _drawInterval = 1000 / 16; // Hi-Speed mode } else { _drawInterval = 1000 / 8; } }
“speed”はどっから出て来たかというと、
設定画面のXML(“lifegame_settings.xml”)として、以下を用意する。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="speed" android:title="Hi-Speed mode" android:summary="on: 16fps, off: 8fps"/> </PreferenceScreen>
設定値は、”android:key=”に指定したキーを通じて取得できる。
ちなみに、今回は”AndroidManifest.xml”に以下の記述を追加している。
場所は、”application”タグ囲まれた、”service”タグの直後に同じインデントで追加。
<activity android:label="@string/lifegame_settings" android:name=".LifeGameWallpaperSettings" android:theme="@android:style/Theme.Light.WallpaperSettings" android:exported="true"> </activity>
“strings.xml”に、
<string name="lifegame_settings">(設定画面のタイトル)</string>
の追加もお忘れなく。
あとは肝心の設定用Activityのソースですが、
公式サイトの”src”フォルダの中を漁ると出てきます。
おしまい。
Leave a Comment