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