Come faccio a impostare un nuovo sfondo in base alla scelta dell'utente nelle impostazioni?
-
25-10-2019 - |
Domanda
sto usando AndEngine per creare una carta da parati dal vivo e SharedPreferences per le impostazioni.
Ecco il mio file XML che ospita le diverse impostazioni che un utente può scegliere per il live wallpaper:
<?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>
I miei sguardi @array come questo:
<?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>
La mia attività principale carta da parati usa questo per verificare se un utente ha scelto una nuova impostazione:
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);
}
}
La mia domanda è ... diciamo che ho 10 sfondi diversi tra cui scegliere: Priorità 1, 2 Sfondo, Sfondo 3 ... ecc, dovrò continuare a fare se Else come nel metodo di cui sopra per essere in grado di prendersi cura di tutti gli sfondi nelle impostazioni? O mi manca un qualche passo? Ci deve essere un modo più semplice per capire quale sfondo l'utente ha fatto clic nelle impostazioni.
Devo fare qualcosa con le 'background_values' nel mio file XML?
E sì, mi rendo conto che la mia affermazione Se non è corretta, ma non ho ancora capito come farlo funzionare correttamente.
Soluzione
Trovato il soulution:
ha creato questo:
@Override
public void onSharedPreferenceChanged(SharedPreferences pSharedPrefs, String pKey)
{
settingsChanged = true;
}
Aggiunto:
@Override
public void onResume(){
super.onResume();
if(settingsChanged)
{
BuildScene();
settingsChanged = false;
}
}
(BuildScene ()) è una chiamata dentro la mia onLoadScene () metodo.)
Poi ho personalizzato codificato Se, Else all'interno del BuildScene () per capire quale opzione l'utente sta utilizzando, e poi applicato la nuova immagine.