Como guardar e aplicar as configurações do tema numa aplicação Android?
sobes.tech IA
Resposta da IA
Para guardar e aplicar as configurações do tema numa aplicação Android, podem ser utilizados vários métodos.
-
SharedPreferences: Método simples para guardar uma pequena quantidade de dados, como o identificador do tema selecionado.// Guardar tema val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_theme_key), themeId) apply() } // Ler tema 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 // Aplicar tema na Activity setTheme(savedThemeId) super.onCreate(savedInstanceState) -
DataStore: Método mais moderno e assíncrono para guardar dados, que oferece fluxos de dados e armazenamento mais fiável.// DataStore private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") // Guardar tema suspend fun saveTheme(themeId: Int) { dataStore.edit { settings -> settings[intPreferencesKey("theme_id")] = themeId } } // Obter tema 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 aplicação do tema na Activity pode ocorrer após obter o valor do
DataStore(por exemplo, usandocollectnuma coroutine) e chamandosetTheme. Pode ser necessário recriar a Activity após alterar o tema para que os recursos sejam carregados corretamente. -
Configurações do sistema para o tema: O Android também oferece suporte integrado para temas: claro, escuro e padrão (que segue as configurações do sistema). Isto pode ser implementado através de recursos.
- Criar estilos para temas claro e escuro (por exemplo,
res/values/themes.xmleres/values-night/themes.xml). - Configurar
AppCompatDelegate.setDefaultNightModepara aplicar o tema programaticamente ou no manifesto da activity através deandroid:theme.
- Criar estilos para temas claro e escuro (por exemplo,
A aplicação de um tema muitas vezes requer a recriação da Activity para que os recursos sejam carregados corretamente. Para isso, pode-se usar recreate().