Android uygulamasında tema ayarlarını nasıl kaydedip kullanabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Etkin bir yaklaşım, seçilen temayı kaydetmek için SharedPreferences kullanmayı ve uygulamak için AppCompatDelegate.setDefaultNightMode() kullanmayı içerir.
-
Temayı kaydetme: Seçilen tema kimliğini (örneğin, "light", "dark", "system") saklamak için
SharedPreferenceskullanın.// SharedPreferences alın val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) // Düzenleyici alın val editor = sharedPrefs.edit() // themeId ile temayı uygulayın editor.putString("current_theme", themeId) // Değişiklikleri kaydet editor.apply() -
Başlangıçta temayı uygulama: Ana
ActivityveyaApplicationsınıfında, kaydedilen değeriSharedPreferences'den okuyun ve temayı uygulayın.// Kaydedilen tema değerini okuyun val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) .getString("current_theme", "system") // Varsayılan 'system' // Temayı uygulayın 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) } -
Kullanıcı tarafından tema değişikliği: Kullanıcı arayüzü sağlayın (örneğin, ayarlarda
RadioButton), burada kullanıcı temayı seçebilir. Seçim yapıldığında, yeni kimliğiSharedPreferences'e kaydedin ve hemenAppCompatDelegate.setDefaultNightMode()çağırarak temayı uygulayın ve gerekirseActivity'yi yeniden başlatın.// Farz edelim ki kullanıcı koyu temayı seçti val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE) val editor = sharedPrefs.edit() editor.putString("current_theme", "dark") editor.apply() // Temayı hemen uygulayın AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // Veya tam tema uygulaması için recreate() kullanın // recreate()
recreate() ile Activity'yi yeniden başlatmak, mevcut Activity içindeki tüm View'lerin yeni tema ile doğru şekilde yeniden çizilmesi için gerekebilir.
-
styles.xmliçinde temaları tanımlama:res/values/styles.xmlveres/values-night/styles.xmldosyalarında açık ve koyu temalar için stiller tanımlayın veTheme.AppCompattemalarından türetin.<!-- res/values/styles.xml --> <style name="AppTheme.Light" parent="Theme.AppCompat.Light"> <!-- Açık tema için stil tanımlamaları --> </style> <!-- res/values-night/styles.xml --> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <!-- Koyu tema için stil tanımlamaları --> </style>
Uygulamanın temel temasını AndroidManifest.xml içinde belirtin:
```xml
<!-- AndroidManifest.xml -->
<application
android:theme="@style/AppTheme.Light"
...>
<!-- ... Activities -->
</application>
```
-
Tema değişikliklerini izleme: Sistem teması değiştiğinde (örneğin, zamanlamaya göre veya telefon ayarlarıyla manuel),
onConfigurationChanged()içindeConfiguration.uiModekullanarak tepki verebilirsiniz, ancakAppCompatDelegategenellikleMODE_NIGHT_FOLLOW_SYSTEMkullanıldığında otomatik olarak bunu yönetir.@Override override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) // Gerekirse yeni temayı kontrol edebilirsiniz // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK // ... }
AppCompatDelegate kullanımı, Android'de temaları desteklemek için önerilen yaklaşımdır çünkü geri uyumluluk sağlar ve destek kitaplığıyla çeşitli bileşenlerin düzgün çalışmasını temin eder.