Koyu tema, Android 10 (API düzeyi 29) ve sonraki sürümlerde kullanılabilir. Bu yöntemin avantajları şunlardır:
- Cihazın ekran teknolojisine bağlı olarak güç kullanımını önemli ölçüde azaltır.
- Az gören ve parlak ışığa duyarlı kullanıcılar için görünürlüğü iyileştirir.
- Cihazın loş ışıklı ortamlarda kullanımını kolaylaştırır.
Koyu tema, Android sistem kullanıcı arayüzü ve cihazda çalışan uygulamalar için geçerlidir.
Android 10 ve sonraki sürümlerde koyu temayı etkinleştirmenin üç yolu vardır:
- Koyu temayı etkinleştirmek için Ayarlar > Ekran > Tema'ya giderek sistem ayarını kullanın.
- Etkinleştirildiğinde bildirim tepsisinden temalar arasında geçiş yapmak için Hızlı Ayar kutusunu kullanın.
- Pixel cihazlarda Pil Tasarrufu modunu etkinleştirerek koyu temayı da aynı anda etkinleştirebilirsiniz. Diğer cihazlar bu davranışı desteklemeyebilir.
WebView bileşeni kullanarak web tabanlı içeriğe koyu tema uygulama talimatları için WebView'da web içeriğini koyulaştırma başlıklı makaleyi inceleyin.
Uygulamanızda koyu temayı destekleme
Koyu temayı desteklemek için uygulamanızın temasını (genellikle res/values/styles.xml içinde bulunur) bir DayNight temasından devralacak şekilde ayarlayın:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Material Components koyu temasını da kullanabilirsiniz:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Bu, uygulamanın ana temasını sistem tarafından kontrol edilen gece modu işaretlerine bağlar ve etkinleştirildiğinde uygulamaya varsayılan bir koyu tema verir.
Temalar ve stiller
Açık tema için tasarlanmış, sabit kodlu renkler veya simgeler kullanmaktan kaçının. Bunun yerine tema özelliklerini veya geceye uygun kaynakları kullanın.
Koyu tema için en önemli iki tema özelliği vardır:
?android:attr/textColorPrimary: Genel amaçlı bir metin rengi. Açık temada siyaha yakın, koyu temada ise beyaza yakın bir renktedir. Devre dışı durumunu içerir.?attr/colorControlNormal: Genel amaçlı bir simge rengi. Devre dışı bırakılmış bir durum içerir.
Materyal Tasarım Bileşenleri'ni kullanmanızı öneririz. ?attr/colorSurface ve ?attr/colorOnSurface gibi tema özellikleri içeren renk teması sistemi, uygun renklere kolay erişim sağlar. Bu özellikleri temanızda özelleştirebilirsiniz.
Uygulama içinde temaları değiştirme
Kullanıcıların, uygulama çalışırken uygulamanın temasını değiştirmesine izin verebilirsiniz. Aşağıdakiler önerilen seçeneklerdir:
- Açık
- Koyu
- Sistem varsayılanı (önerilen varsayılan seçenek)
Bu seçenekler doğrudan AppCompat.DayNight modlarıyla eşleşir:
Açık:
MODE_NIGHT_NO.Koyu:
MODE_NIGHT_YES.Sistem varsayılanı:
MODE_NIGHT_FOLLOW_SYSTEM.
Temayı değiştirmek için aşağıdakileri yapın:
API düzeyi 31 ve sonraki sürümlerde, sistemin uygulamanızın hangi temayı çalıştırdığını bilmesi için
UiModeManager#setApplicationNightModekullanın. Bu sayede sistem, başlangıç ekranı sırasında temayı eşleştirebilir.API düzeyi 30 ve altında, temayı değiştirmek için
AppCompatDelegate.setDefaultNightMode()kullanın.
Zorunlu Koyu Mod
Android 10, geliştiricilerin açıkça bir DayNight teması ayarlamadan hızlı bir şekilde koyu tema uygulamasına olanak tanıyan Zorunlu Koyu Mod özelliğini sunar.
Zorunlu koyu mod, açık temalı uygulamanızın her görünümünü analiz eder ve ekrana çizilmeden önce otomatik olarak koyu tema uygular. Koyu temayı uygulamak için gereken süreyi azaltmak amacıyla zorunlu koyu mod ve yerel uygulamayı birlikte kullanabilirsiniz.
Uygulamaların, etkinliğin temasında android:forceDarkAllowed="true" ayarını yaparak zorunlu koyu modu etkinleştirmesi gerekir. Bu özellik, sistem ve AndroidX tarafından sağlanan tüm açık temalarda (ör. Theme.Material.Light) ayarlanır. Zorunlu koyu mod özelliğini kullanırken uygulamanızı kapsamlı bir şekilde test edin ve görünümleri gerektiği gibi hariç tutun.
Uygulamanızda koyu tema (ör. Theme.Material) kullanılıyorsa zorunlu koyu mod uygulanmaz. Benzer şekilde, uygulamanızın teması bir DayNight temasından devralınıyorsa otomatik tema geçişi nedeniyle zorunlu koyu mod uygulanmaz.
Bir görünümde zorunlu koyu modu devre dışı bırakma
Zorunlu koyu mod, android:forceDarkAllowed düzen özelliği veya setForceDarkAllowed() ile belirli görünümlerde kontrol edilebilir.
Web içeriği
Web tabanlı içeriklerde koyu temaları kullanma hakkında bilgi edinmek için WebView'da web içeriğini koyulaştırma başlıklı makaleyi inceleyin. WebView'a uygulanan koyu tema örneği için GitHub'daki WebView demosuna bakın.
En iyi uygulamalar
Aşağıdaki bölümlerde, koyu temaları uygulamayla ilgili en iyi uygulamalar yer almaktadır.
Bildirimler ve widget'lar
Cihazda gösterdiğiniz ancak doğrudan kontrol etmediğiniz kullanıcı arayüzü yüzeyleri için kullandığınız görünümlerin, ana uygulamanın temasını yansıttığından emin olun. Bildirimler ve başlatıcı widget'ları buna örnek olarak verilebilir.
Bildirimler
Sistem tarafından sağlanan bildirim şablonlarını (ör. MessagingStyle) kullanın. Bu, doğru görünüm stilini uygulama sorumluluğunun sisteme ait olduğu anlamına gelir.
Widget'lar ve özel bildirim görünümleri
Başlatıcı widget'ları için veya uygulamanız özel bildirim içeriği görünümleri kullanıyorsa içeriği hem açık hem de koyu temalarda test edin.
Dikkat edilmesi gereken yaygın hatalar şunlardır:
- Arka plan renginin her zaman açık olduğu varsayılır.
- Metin renklerini sabit kodlama
- Varsayılan metin rengini kullanırken sabit kodlu bir arka plan rengi ayarlama.
- Statik renkli bir çizilebilir simge kullanma.
Tüm bu durumlarda, sabit kodlanmış renkler yerine uygun tema özelliklerini kullanın.
Başlatma ekranları
Uygulamanızda özel bir başlatma ekranı varsa seçilen temayı yansıtacak şekilde değiştirmeniz gerekebilir.
Programatik olarak beyaz olarak ayarlanan arka plan renkleri gibi sabit kodlu renkleri kaldırın. Bunun yerine ?android:attr/colorBackground tema özelliğini kullanın.
Yapılandırma değişiklikleri
Uygulamanın teması sistem ayarı veya AppCompat aracılığıyla değiştiğinde uiMode yapılandırma değişikliği tetiklenir. Bu, etkinliklerin otomatik olarak yeniden oluşturulduğu anlamına gelir.
Bazı durumlarda, yapılandırma değişikliğini bir uygulamanın işlemesini isteyebilirsiniz. Örneğin, bir video oynatıldığı için yapılandırma değişikliğini geciktirmek isteyebilirsiniz.
Bir uygulama, her Activity öğesinin uiMode yapılandırma değişikliğini işleyebileceğini bildirerek koyu tema uygulamasını işleyebilir:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Bir Activity, yapılandırma değişikliklerini işlediğini beyan ettiğinde tema değişikliği olduğunda onConfigurationChanged() yöntemi çağrılır.
Uygulamalar, mevcut temanın ne olduğunu kontrol etmek için aşağıdaki gibi bir kod çalıştırabilir:
Kotlin
val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (currentNightMode) { Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme. Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme. }
Java
int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK; switch (currentNightMode) { case Configuration.UI_MODE_NIGHT_NO: // Night mode is not active, we're using the light theme break; case Configuration.UI_MODE_NIGHT_YES: // Night mode is active, we're using dark theme break; }