Koyu tema, Android 10 (API düzeyi 29) ve sonraki sürümlerde kullanılabilir. Aşağıdaki avantajları sağlar:
- Cihazın ekran teknolojisine bağlı olarak güç kullanımını önemli ölçüde azaltır.
- Az gören kullanıcılar ve parlak ışığa karşı hassas olan kullanıcılar için görünürlüğü artırır.
- Cihazın zayıf ışıklı bir ortamda 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, bildirimleri bildirim tepsisinden tema değiştirmek için Hızlı Ayarlar kutusunu kullanın.
- Pixel cihazlarda aynı anda koyu temayı etkinleştirmek için Pil Tasarrufu modunu etkinleştirin. Diğer cihazlar bu davranışı desteklemeyebilir.
Web Görünümü bileşeni kullanarak web tabanlı içeriğe koyu tema uygulama talimatları için Web Görünümü'nde web içeriğini karartma bölümüne göz atın.
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">
Malzeme Bileşenleri 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 bayraklarına bağlar ve etkinleştirildiğinde uygulamaya varsayılan bir koyu tema verir.
Temalar ve stiller
Açık renkli bir tema altında kullanılmak üzere tasarlanmış sabit kodlu renkler veya simgeler kullanmaktan kaçının. Bunun yerine tema özelliklerini veya gece nitelikli 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 temalarda neredeyse beyazdır. Devre dışı bırakılmış bir durum içerir.?attr/colorControlNormal
: Genel amaçlı simge rengi. Devre dışı bırakılmış bir durum içerir.
?attr/colorSurface
ve ?attr/colorOnSurface
tema özellikleri gibi renk tema oluşturma sistemi uygun renklere kolay erişim sağladığından Materyal Tasarım Bileşenleri'ni kullanmanızı öneririz. Bu özellikleri temanızda özelleştirebilirsiniz.
Temaları uygulama içinde değiştirme
Kullanıcıların, uygulama çalışırken uygulamanın temasını değiştirmesine izin verebilirsiniz. Önerilen seçenekler şunlardır:
- Hafif
- Kasvetli
- Sistem varsayılanı (önerilen varsayılan seçenek)
Şu seçenekler doğrudan AppCompat.DayNight
modlarıyla eşlenir:
Hafif:
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, uygulamanızın hangi temayı çalıştırdığını sisteme bildirmek için
UiModeManager#setApplicationNightMode
kullanın. Bu, sistemin başlangıç ekranı sırasında temayı eşleştirmesini sağlar.API düzeyi 30 ve önceki sürümlerde temayı değiştirmek için
AppCompatDelegate.setDefaultNightMode()
kullanın.
Koyu Renk Zorla
Android 10, geliştiricilerin DayNight
temasını açıkça ayarlamadan hızlı bir şekilde koyu tema uygulayabilmelerini sağlayan bir özellik olan Koyu Güçlendir'i sunar.
Koyu Güçlendir, açık temalı uygulamanızın her görünümünü analiz eder ve koyu temayı ekrana uygulanmadan önce otomatik olarak uygular. Koyu temayı uygulamak için gereken süreyi kısaltmak için Force Koyu ve yerel uygulamayı birlikte kullanabilirsiniz.
Uygulamalar, etkinliğin temasında android:forceDarkAllowed="true"
ayarını yaparak Koyu Koyu özelliğini etkinleştirmelidir. Bu özellik, Theme.Material.Light
gibi sistem ve AndroidX tarafından sağlanan tüm açık temalarda ayarlanır. Force Dark'ı kullandığınızda uygulamanızı kapsamlı bir şekilde test edin ve gerektiğinde görünümleri hariç tutun.
Uygulamanız Theme.Material
gibi koyu bir tema kullanıyorsa Koyu Zorla uygulanmaz. Benzer şekilde, uygulamanızın teması bir DayNight
temasından devralıyorsa otomatik tema geçişi nedeniyle
Koyu Kuvvet uygulanmaz.
Görünümde Koyu Renk Modunu Zorunlu Kıl ayarını devre dışı bırakma
Force Koyu, belirli görünümlerde android:forceDarkAllowed
düzen özelliği veya setForceDarkAllowed()
ile kontrol edilebilir.
Web içeriği
Web tabanlı içeriklerde koyu tema kullanma hakkında bilgi edinmek için Web Görünümü'nde web içeriğini karartma bölümüne bakın. Bir Web Görünümü'ne uygulanan koyu tema örneği için GitHub'daki Web Görünümü demosunu inceleyin.
En iyi uygulamalar
Aşağıdaki bölümlerde koyu temaların uygulanmasıyla ilgili en iyi uygulamalar sunulmaktadır.
Bildirimler ve widget'lar
Cihazda görüntülediğiniz ancak doğrudan kontrol etmediğiniz kullanıcı arayüzü yüzeyleri için, kullandığınız görünümlerin ana makine uygulamasının temasını yansıttığından emin olun. Bunlar, bildirimler ve başlatıcı widget'larıdır.
Bildirimler
MessagingStyle
gibi sistem tarafından sağlanan bildirim şablonlarını kullanın. Bu, sistemin doğru görünüm stilini uygulamaktan sorumlu 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çerik görünümleri kullanıyorsa içeriği hem açık hem de koyu temada test edin.
Dikkat edilmesi gereken yaygın tehlikeler arasında aşağıdakiler yer alır:
- Arka plan renginin her zaman açık olduğunu varsayarsak.
- Metin renkleri için kod gömme.
- Varsayılan metin rengi kullanılırken sabit kodlu bir arka plan rengi ayarlama.
- Statik renkli çekilebilir bir simge kullanma.
Tüm bu durumlarda, sabit kodlu renkler yerine uygun tema özelliklerini kullanın.
Başlatma ekranları
Uygulamanızın özel bir başlangıç ekranı varsa, bu ekranı, seçilen temayı yansıtacak şekilde değiştirmeniz gerekebilir.
Programlı olarak beyaza ayarlanan arka plan renkleri gibi sabit kodlu renkleri kaldırın. Bunun yerine ?android:attr/colorBackground
teması özelliğini kullanın.
Yapılandırma değişiklikleri
Uygulamanın teması, sistem ayarı veya AppCompat aracılığıyla değiştiğinde bir uiMode
yapılandırma değişikliği tetikler. Bu, etkinliklerin otomatik olarak yeniden oluşturulacağı anlamına gelir.
Bazı durumlarda, yapılandırma değişikliğini bir uygulamanın halletmesini isteyebilirsiniz. Örneğin, bir video oynatılırken yapılandırma değişikliğini ertelemek isteyebilirsiniz.
Bir uygulama, her Activity
için uiMode
yapılandırma değişikliğini işleyebileceğini bildirerek koyu temanın uygulanmasını sağlayabilir:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Activity
bir yapılandırma değişikliklerini işlediğini bildirdiğinde, bir tema değişikliği olduğunda onConfigurationChanged()
yöntemi çağrılır.
Geçerli temanın ne olduğunu kontrol etmek için uygulamalar aşağıdaki gibi 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; }