如何根据用户在设置中的选择设置新壁纸?

时间:2011-11-29 20:18:56

标签: android andengine live-wallpaper

我正在使用AndEngine为设置创建动态壁纸和SharedPreferences。

这是我的XML文件,其中包含用户可以为动态壁纸选择的不同设置:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
                android:title="Main Settings">
           <ListPreference
           android:title="Background Image"
           android:summary="Set the background image for the wallpaper"
           android:key="listPref"
           android:defaultValue="1"
           android:entries="@array/background"
           android:entryValues="@array/background_values" /> 
        </PreferenceCategory>
</PreferenceScreen>

我的@array看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="background">
    <item>Background 1</item>
    <item>Background 2</item>
</string-array>

<string-array name="background_values">
    <item>1</item>
    <item>2</item>
</string-array>

</resources>

我的主要壁纸活动使用它来检查用户是否选择了新设置:

    public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
    {            

        if (prefs.getString("listPref", "Background 1").equals(2))
                {
            Toast.makeText(this, "test", Toast.LENGTH_LONG).show();

    final Scene scene = new Scene();
    final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(
                    0, 0, 0, 5);
    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(2.7f,
                    new Sprite(0, 0, this.mAutoParallaxCustomBackground)));
    scene.setBackground(autoParallaxBackground);
                }
    }

我的问题是......让我说我有10种不同的背景可供选择:背景1,背景2,背景3 ......等等,我将不得不继续制作如上述方法中的Else语句能够照顾设置中的所有背景吗?或者我在某处错过了一步?必须有一种更简单的方法来确定用户在设置中点击了哪个背景。

我是否必须对XML文件中的'background_values'执行某些操作?

是的,我知道我的If语句不正确,但我还没弄明白如何让它正常工作。

1 个答案:

答案 0 :(得分:0)

找到了洗液:

创建了这个:

    @Override
    public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
    {           
            settingsChanged = true;
    }

添加了:

    @Override
    public void onResume(){
        super.onResume();
        if(settingsChanged)
        {
                BuildScene();
                settingsChanged = false;
        }
    }

(BuildScene())是我的onLoadScene()方法内的一个调用。)

然后我只是在BuildScene()方法中自定义编码If,Else语句,找出用户当前使用的选项,然后应用新图像。