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