Sobes.tech
Middle

Hogyan mentjük és alkalmazzuk a téma beállításokat egy Android alkalmazásban?

sobes.tech MI

Válasz az MI-től

Az Android alkalmazásokban a téma beállításainak mentéséhez és alkalmazásához több megközelítés is létezik.

  1. SharedPreferences: Egyszerű módszer a kis adatmennyiség, például a kiválasztott téma azonosítójának mentésére.

    // Téma mentése
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
    with (sharedPref.edit()) {
        putInt(getString(R.string.saved_theme_key), themeId)
        apply()
    }
    
    // Téma olvasása
    val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
    val defaultValue = resources.getInteger(R.integer.default_theme_id)
    val savedThemeId = sharedPref?.getInt(getString(R.string.saved_theme_key), defaultValue) ?: defaultValue
    
    // Téma alkalmazása az Activity-ben
    setTheme(savedThemeId)
    super.onCreate(savedInstanceState)
    
  2. DataStore: Egy modernebb és aszinkron módszer az adatok mentésére, amely adatfolyamokat és megbízhatóbb tárolást kínál.

    // DataStore
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
    // Téma mentése
    suspend fun saveTheme(themeId: Int) {
        dataStore.edit { settings ->
            settings[intPreferencesKey("theme_id")] = themeId
        }
    }
    
    // Téma lekérdezése
    val themeFlow: Flow<Int> = dataStore.data
        .catch { exception ->
            if (exception is IOException) {
                emit(emptyPreferences())
            } else {
                throw exception
            }
        }
        .map { preferences ->
            preferences[intPreferencesKey("theme_id")] ?: R.style.Theme_App
        }
    

    A téma alkalmazása az Activity-ben akkor történik, amikor a DataStore-ból kapott értéket (például collect segítségével coroutine-ben) használva meghívjuk a setTheme-et. Lehet, hogy az Activity újraindítása szükséges a téma változtatása után, hogy a források helyesen töltődjenek be.

  3. Rendszerbeállítások a témához: Az Android beépített támogatást nyújt témákhoz: világos, sötét és alapértelmezett (a rendszerbeállításokat követi). Ez erőforrásokon keresztül valósítható meg.

    • Hozzon létre stílusokat a világos és sötét témákhoz (például res/values/themes.xml és res/values-night/themes.xml).
    • Állítsa be az AppCompatDelegate.setDefaultNightMode-ot, hogy programozottan alkalmazza a témát, vagy az activity manifestjében az android:theme-en keresztül.

A téma alkalmazása gyakran megköveteli az Activity újraindítását, hogy a források helyesen töltődjenek be. Ehhez használhatja a recreate()-et.