Tema gelap tersedia di Android 10 (API level 29) dan yang lebih tinggi. Materi ini memiliki manfaat berikut:
- Mengurangi penggunaan daya secara signifikan, bergantung pada teknologi layar.
- Meningkatkan visibilitas untuk pengguna yang memiliki gangguan penglihatan dan sensitif terhadap cahaya terang.
- Memudahkan penggunaan perangkat di lingkungan yang minim cahaya.
Tema gelap berlaku untuk UI sistem Android dan aplikasi yang berjalan di perangkat.
Ada tiga cara untuk mengaktifkan tema gelap di Android 10 dan yang lebih baru:
- Gunakan setelan sistem dengan membuka Setelan > Tampilan > Tema untuk mengaktifkan tema gelap.
- Gunakan kartu Setelan Cepat untuk beralih tema dari baki notifikasi, saat diaktifkan.
- Di perangkat Pixel, aktifkan mode Penghemat Baterai untuk mengaktifkan tema gelap secara bersamaan baik. Perangkat lain mungkin tidak mendukung perilaku ini.
Untuk petunjuk tentang cara menerapkan tema gelap pada konten berbasis web menggunakan komponen WebView, lihat Menggelapkan konten web di WebView.
Mendukung tema gelap di aplikasi Anda
Untuk mendukung tema gelap, setel tema aplikasi Anda—biasanya ditemukan di
res/values/styles.xml
—untuk mewarisi dari tema DayNight
:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
Anda juga dapat menggunakan Komponen Material gelap tema:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Ini mengikat tema utama aplikasi ke flag mode malam yang dikontrol sistem dan memberi aplikasi tema gelap default saat diaktifkan.
Tema dan gaya
Hindari penggunaan warna atau ikon hardcode yang dimaksudkan untuk digunakan di bawah tema terang. Gunakan atribut tema atau resource yang memenuhi syarat malam sebagai gantinya.
Dua atribut tema yang paling penting untuk tema gelap:
?android:attr/textColorPrimary
: warna teks untuk tujuan umum. Penting hampir hitam dalam tema terang dan hampir putih dalam tema gelap. Atribut ini berisi status nonaktif.?attr/colorControlNormal
: warna ikon untuk tujuan umum. Atribut ini berisi status nonaktif.
Sebaiknya gunakan Desain Material
Komponen, karena tema warnanya
sistem, seperti tema
atribut ?attr/colorSurface
dan ?attr/colorOnSurface
, memberikan akses yang mudah
ke warna yang sesuai. Anda dapat menyesuaikan atribut ini di tema Anda.
Mengubah tema dalam aplikasi
Anda dapat mengizinkan pengguna mengubah tema aplikasi saat aplikasi sedang berjalan. Hal berikut adalah opsi yang direkomendasikan:
- Ringan
- Gelap
- Default sistem (opsi default yang direkomendasikan)
Opsi ini dipetakan langsung ke mode AppCompat.DayNight
:
Ringan:
MODE_NIGHT_NO
Gelap:
MODE_NIGHT_YES
Default sistem:
MODE_NIGHT_FOLLOW_SYSTEM
Untuk mengganti tema, lakukan langkah berikut:
Pada level API 31 dan yang lebih tinggi, gunakan
UiModeManager#setApplicationNightMode
agar sistem mengetahui tema yang dijalankan aplikasi Anda. Ini memungkinkan sistem mencocokkan tema selama layar pembuka.Pada level API 30 dan yang lebih rendah, gunakan
AppCompatDelegate.setDefaultNightMode()
untuk mengganti tema.
Force Dark
Android 10 menyediakan Force Dark, fitur bagi developer untuk
menerapkan tema gelap dengan cepat tanpa menetapkan tema DayNight
secara eksplisit.
Force Dark menganalisis setiap tampilan aplikasi bertema terang dan menerapkan tema gelap secara otomatis sebelum digambar ke layar. Anda dapat menggunakan kombinasi Force Dark dan implementasi native untuk mengurangi waktu yang dibutuhkan guna menerapkan tema.
Aplikasi harus mengaktifkan Paksa Gelap dengan menyetel android:forceDarkAllowed="true"
di
tema aktivitas. Atribut ini diatur di semua elemen
Tema terang yang disediakan AndroidX, seperti Theme.Material.Light
. Saat Anda menggunakan
Paksa Gelap, uji aplikasi Anda secara menyeluruh dan kecualikan tampilan sesuai kebutuhan.
Jika aplikasi Anda menggunakan tema gelap, seperti Theme.Material
), Paksa Gelap tidak akan
diterapkan. Demikian pula, jika tema aplikasi Anda mewarisi dari tema DayNight
, Force
Gelap tidak diterapkan karena peralihan tema otomatis.
Menonaktifkan Force Dark pada tampilan
Force Dark dapat dikontrol pada tampilan tertentu dengan
Atribut tata letak android:forceDarkAllowed
atau dengan
setForceDarkAllowed()
.
Konten web
Untuk informasi tentang penggunaan tema gelap dalam konten berbasis web, lihat Menggelapkan konten web di WebView. Contoh tema gelap diterapkan ke WebView, lihat demo WebView di GitHub kami.
Praktik terbaik
Bagian berikut memberikan praktik terbaik untuk mengimplementasikan tema gelap.
Notifikasi dan widget
Untuk platform UI yang ditampilkan di perangkat tetapi tidak dikontrol secara langsung, pastikan bahwa setiap tampilan yang Anda gunakan mencerminkan tema aplikasi host. Dua contohnya adalah notifikasi dan widget peluncur.
Notifikasi
Gunakan template notifikasi yang disediakan sistem, seperti MessagingStyle
. Ini
berarti sistem bertanggung jawab untuk menerapkan gaya tampilan yang benar.
Tampilan widget dan notifikasi kustom
Untuk widget peluncur, atau jika aplikasi Anda menggunakan tampilan konten notifikasi kustom, menguji konten pada tema terang dan gelap.
Perangkap umum yang harus diperhatikan meliputi:
- Dengan asumsi bahwa warna latar belakang selalu terang.
- Melakukan hardcode warna teks.
- Menyetel warna latar belakang hardcode saat menggunakan warna teks default.
- Menggunakan ikon drawable yang merupakan warna statis.
Dalam semua kasus ini, gunakan atribut tema yang sesuai alih-alih di-hardcode warna.
Meluncurkan layar
Jika aplikasi Anda memiliki layar peluncuran khusus, Anda mungkin perlu memodifikasinya agar mencerminkan tema yang dipilih.
Hapus warna hardcode seperti warna latar belakang yang disetel secara terprogram ke
putih. Sebagai gantinya, gunakan atribut tema ?android:attr/colorBackground
.
Perubahan konfigurasi
Saat tema aplikasi berubah, baik melalui pengaturan sistem atau AppCompat,
memicu uiMode
perubahan konfigurasi. Artinya, aktivitas dibuat ulang secara otomatis.
Dalam beberapa kasus, Anda mungkin ingin agar aplikasi menangani perubahan konfigurasi. Misalnya, Anda mungkin ingin menunda perubahan konfigurasi karena ada video yang sedang diputar.
Sebuah aplikasi dapat menangani implementasi tema gelap dengan mendeklarasikan bahwa setiap
Activity
dapat menangani perubahan konfigurasi uiMode
:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Ketika Activity
mendeklarasikan bahwa kode menangani perubahan konfigurasi, elemen
onConfigurationChanged()
akan dipanggil bila ada perubahan tema.
Untuk memeriksa tema saat ini, aplikasi dapat menjalankan kode seperti berikut:
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; }