Koyu tema uygulama

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluştur'da temalarla nasıl çalışacağınızı öğrenin.

Şekil 1. Koyu tema.

Koyu tema, Android 10 (API düzeyi 29) ve sonraki sürümlerde kullanılabilir. Bu yöntemin şu avantajları vardır:

  • Cihazın ekran teknolojisine bağlı olarak güç tüketimini önemli ölçüde azaltır.
  • Az gören ve parlak ışığa duyarlı 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 tema değiştirmek için Hızlı Ayarlar kartını kullanın.
  • Pixel cihazlarda koyu temayı da 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 uygulamayla ilgili talimatlar için WebView'de 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">

Malzeme Bileşenleri koyu temasını da kullanabilirsiniz:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

Bu, uygulamanın ana temasını sistem kontrollü gece modu işaretleriyle ilişkilendirir ve etkinleştirildiğinde uygulamaya varsayılan koyu tema verir.

Temalar ve stiller

Açık temada kullanılmak üzere kodlanmış 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ışı bir durum içerir.
  • ?attr/colorControlNormal: genel amaçlı bir simge rengi. Devre dışı bir durum içerir.

Tema özellikleri ?attr/colorSurface ve ?attr/colorOnSurface gibi renk temalandırma sistemi, uygun renklere kolay erişim sağladığından Material Design Bileşenleri'ni kullanmanızı öneririz. Bu özellikleri temanızda özelleştirebilirsiniz.

Uygulama içinde temaları değiştirme

Kullanıcıların uygulama çalışırken temasını değiştirmelerine izin verebilirsiniz. Önerilen seçenekler şunlardır:

  • Hafif
  • Kasvetli
  • Sistem varsayılanı (önerilen varsayılan seçenek)

Bu seçenekler doğrudan AppCompat.DayNight modlarıyla eşlenir:

Temayı değiştirmek için aşağıdakileri yapın:

Koyuluğu Zorunlu Kıl

Android 10, geliştiricilerin DayNight temasını açıkça ayarlamaksızın koyu temayı hızlı bir şekilde uygulamalarını sağlayan Koyu Temayı Zorunlu Kılma özelliğini sunar.

Koyu Modu Zorunlu Kılma, 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 kısaltmak amacıyla koyu temayı zorunlu kılma ve yerel uygulamayı birlikte 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 Modu Zorunlu Tut'u kullandığınızda uygulamanızı kapsamlı bir şekilde test edin ve gerektiğinde görünümleri hariç tutun.

Uygulamanız koyu tema (ör. Theme.Material) kullanıyorsa Koyu Temayı Zorla seçeneği uygulanmaz. Benzer şekilde, uygulamanızın teması bir DayNight temasından devralındıysa otomatik tema geçişi nedeniyle Koyu'yu Zorunlu Kılma uygulanmaz.

Bir görünümde koyu modu zorlamayı devre dışı bırakma

Zorunlu karanlık modu, 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 WebView'da web içeriğini koyulaştırma bölümüne bakın. WebView'e uygulanan koyu tema örneği için GitHub'daki WebView demosuna göz atı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. Bildirimler ve başlatıcı widget'ları buna örnek gösterilebilir.

Bildirimler

Sistem tarafından sağlanan bildirim şablonlarını (ör. MessagingStyle) kullanın. Bu, doğru görünüm stilini uygulamanın sistemden 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 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 renkte bir çizilebilir simge kullanılması

Tüm bu durumlarda, sabit kodlu renkler yerine uygun tema özelliklerini kullanın.

Lansman ekranları

Uygulamanızda özel bir başlatma ekranı varsa bunu, 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 aracılığıyla değiştiğinde uiMode yapılandırma değişikliği tetiklenir. Bu durumda etkinlikler otomatik olarak yeniden oluşturulur.

Bazı durumlarda, yapılandırma değişikliğini bir uygulamanın yapması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" />

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 temayı 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;
}