Comment puis-je créer un nouveau fond d'écran basé sur le choix de l'utilisateur dans les paramètres?
-
25-10-2019 - |
Question
J'utilise AndEngine pour créer un fond d'écran en direct et SharedPreferences pour les réglages.
Voici mon fichier XML qui héberge les différents paramètres d'un utilisateur peut choisir le fond d'écran en direct:
<?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>
Mes regards @array comme ceci:
<?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>
Ma principale activité de fond d'écran utilise pour vérifier si un utilisateur a choisi un nouveau paramètre:
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);
}
}
Ma question est ... Disons que j'ai 10 arrière-plans différents à choisir: Contexte 1, Contexte 2, Contexte 3 ... etc., dois-je continuer à faire des déclarations Si d'autre comme dans la méthode ci-dessus pour être en mesure de prendre soin de tous les milieux dans les paramètres? Ou suis-je manque un endroit étape? Il doit y avoir un moyen plus facile de savoir quel fond l'utilisateur a cliqué dans les paramètres.
Dois-je faire quelque chose avec les « background_values ??» dans mon fichier XML?
Et oui, je me rends compte de ma déclaration est incorrecte Si mais je l'ai pas encore compris comment le faire fonctionner correctement.
La solution
Nous avons trouvé le Soulution:
Créé ceci:
@Override
public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
{
settingsChanged = true;
}
Ajout:
@Override
public void onResume(){
super.onResume();
if(settingsChanged)
{
BuildScene();
settingsChanged = false;
}
}
(BuildScene ()) est un appel à l'intérieur de ma méthode onLoadScene ().)
Alors je viens personnalisé Si codé, déclarations autre à l'intérieur de la méthode BuildScene () pour savoir quelle option l'utilisateur est actuellement à l'aide, puis appliqué la nouvelle image.