Koyu tema, Android 10 (API düzeyi 29) ve sonraki sürümlerde kullanılabilir. Şu faydaları sağlar:
- Cihazın ekran teknolojisine bağlı olarak güç kullanımını önemli ölçüde azaltır.
- Az gören ve parlak ışığa karşı hassas olan kullanıcılar için görünürlüğü iyileştirir.
- Düşük ışıklı ortamlarda cihazın 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ı 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.
WebView bileşeni kullanarak web tabanlı içeriğe koyu tema uygulama talimatları için Web Görünümü'nde web içeriğini koyulaştırma bölümüne bakın.
Uygulamanızda koyu temayı destekleme
Koyu temayı desteklemek için uygulamanızın temasını (genellikle res/values/styles.xml
içindedir) DayNight
temasından devralınacak ş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 işlem, 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 tema altında kullanılmak üzere tasarlanmış sabit kodlu renkler veya simgeler kullanmaktan kaçının. Bunun yerine tema özelliklerini veya gecelik nitelikli kaynakları kullanın.
Koyu tema için en önemli iki tema özelliği şunlardır:
?android:attr/textColorPrimary
: Genel amaçlı bir metin rengi. Açık temada neredeyse siyah, koyu temalarda ise neredeyse beyazdır. Devre dışı durum içeriyor.?attr/colorControlNormal
: genel amaçlı bir simge rengi. Devre dışı durum içeriyor.
?attr/colorSurface
ve ?attr/colorOnSurface
tema özellikleri gibi renk teması oluşturma sistemi uygun renklere kolay erişim sağladığı için Materyal Tasarım Bileşenleri kullanmanızı öneririz. 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:
- Hafif
- Kasvetli
- Sistem varsayılanı (önerilen varsayılan seçenek)
Bu 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 şunları yapın:
API düzeyi 31 ve üzeri 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()
tuşunu kullanın.
Koyuluğu Zorunlu Kıl
Android 10, geliştiricilerin açık bir DayNight
teması ayarlamadan koyu temayı hızla uygulamasını sağlayan Koyu Güçlük özelliğini sunar.
Koyu kuvvet, açık temalı uygulamanızın her görünümünü analiz eder ve ekrana çizilmeden önce koyu temayı otomatik olarak uygular. Koyu temayı uygulamak için gereken süreyi kısaltmak amacıyla Koyu Güçlendirme ve yerel uygulamayı karışık olarak kullanabilirsiniz.
Uygulamalar, etkinliğin temasında android:forceDarkAllowed="true"
ayarlayarak Koyu Zorla'yı etkinleştirmelidir. Bu özellik, sistem ve AndroidX tarafından sağlanan Theme.Material.Light
gibi tüm açık temada ayarlanır. Koyu temayı kullandığınızda uygulamanızı kapsamlı bir şekilde test edin ve gerektiğinde görünümleri hariç tutun.
Uygulamanızda Theme.Material
gibi koyu bir tema kullanılıyorsa Zorunlu Koyu tema uygulanmaz. Benzer şekilde, uygulamanızın teması bir DayNight
temasından devralınıyorsa otomatik tema geçişinden dolayı Koyu Zorla uygulanmaz.
Bir görünümde Koyu Mod'u devre dışı bırakma
Koyu Zorunlu Kısmı, belirli görünümlerde android:forceDarkAllowed
düzen özelliğiyle veya setForceDarkAllowed()
ile kontrol edilebilir.
Web içeriği
Web tabanlı içeriklerde koyu tema kullanma hakkında bilgi edinmek için WebView'da web içeriğini koyulaştırma bölümüne bakın. WebView'a uygulanan bir koyu tema örneği için GitHub'da WebView demosuna bakın.
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üzeylerinde, kullandığınız görünümlerin ana makine uygulamasının temasını yansıttığından emin olun. Bunlara örnek olarak bildirimler ve başlatıcı widget'ları verilebilir.
Bildirimler
Sistem tarafından sağlanan MessagingStyle
gibi bildirim şablonlarını kullanın. Bu, doğru görünüm stilini uygulamaktan sistemin 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 temalarda test edin.
Dikkat edilmesi gereken yaygın tehlikeler şunlardır:
- Arka plan renginin her zaman açık olduğu varsayılır.
- Metin renklerinin sabitlenmesi.
- Varsayılan metin rengini kullanırken sabit kodlu bir arka plan rengi ayarlama.
- Statik renk olan bir çekilebilir simge kullanmak.
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 onu 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
tema özelliğini kullanın.
Yapılandırma değişiklikleri
Uygulamanın teması, sistem ayarı veya AppCompat üzerinden değiştiğinde bir uiMode
yapılandırma değişikliğini tetikler. Bu, etkinliklerin otomatik olarak yeniden oluşturulduğu anlamına gelir.
Bazı durumlarda, yapılandırma değişikliğini bir uygulamanın işleme almasını isteyebilirsiniz. Örneğin, bir video oynatıldığı için yapılandırma değişikliğini ertelemek isteyebilirsiniz.
Bir uygulama, her Activity
ürününün uiMode
yapılandırma değişikliğini işleyebileceğini beyan ederek koyu tema uygulama işini yönetebilir:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Activity
, yapılandırma değişikliklerini işlediğini bildirdiğ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 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; }