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