Sobes.tech
Junior

Kuidas salvestada ja kasutada teema seadeid Android rakenduses?

sobes.tech AI

Vastus AI-lt

Tõhusa lähenemisviisi hõlmab SharedPreferences kasutamist valitud teema salvestamiseks ja AppCompatDelegate.setDefaultNightMode() rakendamist:

  1. Teema salvestamine: Kasutage SharedPreferences, et salvestada valitud teema identifikaator (näiteks "light", "dark", "system").

    // Saame SharedPreferences
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    // Saame redaktori
    val editor = sharedPrefs.edit()
    // Rakendame teema ID-ga themeId
    editor.putString("current_theme", themeId)
    // Salvestame muudatused
    editor.apply()
    
  2. Teema rakendamine käivitamisel: Peamises Activity või Application klassis loe salvestatud väärtus SharedPreferences-st ja rakenda teema:

    // Loe salvestatud teema väärtus
    val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
        .getString("current_theme", "system") // Vaikimisi 'system'
    
    // Rakenda teema
    when (themeId) {
        "light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
        "dark" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
        "system" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
        else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
    }
    
  3. Kasutaja teema muutmine: Looge kasutajaliides (näiteks RadioButton seadetes), kus kasutaja saab valida teema. Valides salvestage uus identifikaator SharedPreferences-s ja rakendage teemat kohe, kutsudes välja AppCompatDelegate.setDefaultNightMode() ning vajadusel taaskäivitage Activity, et teemat õigesti rakendada:

    // Oletame, et kasutaja valis tume teema
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    val editor = sharedPrefs.edit()
    editor.putString("current_theme", "dark")
    editor.apply()
    
    // Rakenda teema kohe
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    
    // Või recreate() täielikuks rakendamiseks
    // recreate()
    

    Activity taaskäivitamine recreate()-ga võib olla vajalik, et kõik vaated praeguses Activity õigesti uueneksid uue teema järgi.

  4. Teemade määratlemine styles.xml-is: Määratlege heleda ja tume teema stiilid res/values/styles.xml ja res/values-night/styles.xml-is vastavalt, pärides Theme.AppCompat-ist:

    <!-- res/values/styles.xml -->
    <style name="AppTheme.Light" parent="Theme.AppCompat.Light">
        <!-- Heleda teema stiilide määratlused -->
    </style>
    
    <!-- res/values-night/styles.xml -->
    <style name="AppTheme.Dark" parent="Theme.AppCompat">
        <!-- Tume teema stiilide määratlused -->
    </style>
    

    AndroidManifest.xml-is määrake rakenduse põhiteema:

    <!-- AndroidManifest.xml -->
    <application
        android:theme="@style/AppTheme.Light"
        ...>
        <!-- ... Activities -->
    </application>
    
  5. Teemamuutuste jälgimine: Kui süsteem muudab teemat (näiteks ajakava järgi või kasutaja käsitsi telefonis seadistades), saate kasutada Configuration.uiMode onConfigurationChanged()-is reageerimiseks, kuid AppCompatDelegate haldab seda tavaliselt automaatselt, kasutades MODE_NIGHT_FOLLOW_SYSTEM.

    @Override
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // Võite kontrollida uut teemat, kui vaja
        // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK
        // ...
    }
    

AppCompatDelegate kasutamine on soovitatav lähenemisviis teemade toetamiseks Androidis, kuna see tagab tagasiparimuse ja korrektse toimimise erinevate toetuse teekonna komponentidega.