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"?>
<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”タグの直後に同じインデントで追加。

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