Saya telah mengatur warna statusBar saya menjadi transparan untuk Lollipop hanya dengan baris berikut dalam tema saya:
<item name="android:statusBarColor">@android:color/transparent</item>
Sekarang saya harus menggambar di belakangnya, tetapi saya tidak bisa mendapatkan gambar apa pun di belakangnya. Saya tahu bagaimana melakukannya dengan windowTranslucentStatus
properti, tetapi tidak ingin menggunakan properti ini karena akan mengabaikan warna statusBar diatur ke transparan.
android
android-ui
android-5.0-lollipop
alxscms
sumber
sumber
android:fitsSystemWindows="true"
Jawaban:
Metode # 1:
Untuk mencapai bilah status yang benar-benar transparan, Anda harus menggunakannya
statusBarColor
, yang hanya tersedia di API 21 ke atas.windowTranslucentStatus
tersedia di API 19 dan di atasnya, tetapi menambahkan latar belakang berwarna untuk bilah status. Namun, pengaturanwindowTranslucentStatus
memang mencapai satu hal yang tidak berubahstatusBarColor
menjadi transparan: ia menetapkanSYSTEM_UI_FLAG_LAYOUT_STABLE
danSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
menandai. Cara termudah untuk mendapatkan efek yang sama adalah dengan secara manual mengatur flag-flag ini, yang secara efektif menonaktifkan insets yang diberlakukan oleh sistem tata letak Android dan membuat Anda berjuang sendiri.Anda menyebut baris ini dalam
onCreate
metode Anda :Pastikan juga mengatur transparansi di /res/values-v21/styles.xml:
Atau atur transparansi secara terprogram:
Sisi baik dari pendekatan ini adalah bahwa tata letak dan desain yang sama juga dapat digunakan pada API 19 dengan memperdagangkan bilah status transparan untuk bilah status transparan yang berwarna.
Metode # 2:
Jika Anda hanya perlu melukis gambar latar belakang di bawah bilah status Anda, alih-alih memposisikan tampilan di belakangnya, ini dapat dilakukan dengan hanya mengatur latar belakang tema aktivitas Anda ke gambar yang diinginkan dan mengatur transparansi bilah status seperti ditunjukkan dalam metode # 1. Ini adalah metode yang saya gunakan untuk membuat tangkapan layar untuk artikel Android Police dari beberapa bulan yang lalu.
Metode # 3:
Jika Anda harus mengabaikan insets sistem standar untuk beberapa tata letak sembari tetap membuatnya bekerja pada yang lain, satu-satunya cara yang layak untuk melakukannya adalah bekerja dengan kelas yang sering dikaitkan
ScrimInsetsFrameLayout
. Tentu saja, beberapa hal yang dilakukan di kelas itu tidak diperlukan untuk semua skenario. Misalnya, jika Anda tidak berencana untuk menggunakan overlay bilah status sintetis, cukup komentari semuanya dalaminit()
metode ini dan jangan repot-repot menambahkan apa pun ke file attrs.xml. Saya telah melihat pendekatan ini berhasil, tetapi saya pikir Anda akan menemukan bahwa itu membawa beberapa implikasi lain yang mungkin banyak pekerjaan untuk diselesaikan.Saya juga melihat bahwa Anda menentang membungkus banyak tata letak. Dalam hal membungkus satu tata letak di dalam yang lain, di mana keduanya memiliki
match_parent
tinggi dan lebar, implikasi kinerja terlalu sepele untuk dikhawatirkan. Apa pun itu, Anda dapat menghindari situasi itu sepenuhnya dengan mengubah kelas yang dimilikinya dariFrameLayout
jenis kelas Layout lain yang Anda suka. Ini akan bekerja dengan baik.sumber
SYSTEM_UI_FLAG_LAYOUT_STABLE
danSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
bendera adalah solusi yang saya cari.CollapsingToolbarLayout
danToolbar
: status bar tetap tidak sepenuhnya transparan danandroid:statusBarColor
tidak berpengaruhIni berhasil untuk kasus saya
Untuk informasi lebih lanjut tentang bekerja dengan statusBars: youtube.com/watch?v=_mGDMVRO3iE
sumber
Coba tema ini
Pastikan itu, tata letak Anda diatur
sumber
android:fitsSystemWindows="false"
adalah memotong bilah alat menjadi dua.Dari pada
Gunakan yang berikut ini:
Dan pastikan untuk menghapus bantalan atas (yang ditambahkan secara default) pada tata letak 'MainActivity' Anda.
Perhatikan bahwa ini tidak membuat bilah status sepenuhnya transparan, dan masih akan ada overlay "pudar hitam" di atas bilah status Anda.
sumber
<item name="android:windowTranslucentStatus">true</item>
, itu membuat android menempatkan latar belakang hitam pudar di bawah bilah status yang bukan yang saya cari. Adakah cara untuk tidak memiliki latar belakang hitam pudar ini?Solusi dari Cody Toombs hampir berhasil untuk saya. Saya tidak yakin apakah ini terkait Xamarin atau tidak, tetapi saya sekarang memiliki solusi yang dapat diterima:
Ini pengaturan saya:
Saya memiliki proyek Android di mana saya telah merujuk paket Android.Support v4 dan v7. Saya memiliki dua gaya:
values / styles.xml:
values-v21 / styles.xml:
AndroidManifest menargetkan "MyStyle":
AndroidManifest.xml:
Dan akhirnya kode di Aktivitas Utama:
Perhatikan bahwa saya menetapkan flag DrawsSystemBarBackgrounds, ini membuat semua perbedaan
Saya menghabiskan banyak waktu untuk memperbaikinya, terlalu banyak waktu sebenarnya. Semoga jawaban ini membantu siapa pun yang mencoba mencapai hal yang sama.
sumber
android:windowTranslucentStatus
membutuhkan API level 19 atau lebih tinggi, bagaimana mungkin Anda menggunakannya pada nilai / styles.xml Anda saat memilikiandroid:minSdkVersion
10?Jawaban @Cody Toombs mengarah ke masalah yang membawa tata letak di belakang bilah navigasi. Jadi yang saya temukan adalah menggunakan solusi ini yang diberikan oleh @Kriti
di sini adalah potongan kode Kotlin untuk hal yang sama:
Anda juga perlu menambahkan
lihat root tata letak Anda.
sumber
Saya memiliki masalah yang sama jadi saya membuat ImageView yang menarik di belakang bilah status API 19+
Tetapkan gambar khusus di belakang Bilah Status gist.github.com
sumber
Anda dapat menggunakan ScrimInsetFrameLayout
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitsSystemWindows = "true" harus ditetapkan pada tata letak samaran!
sumber
RelativeLayout
bukanFrameLayout
?Mirip dengan beberapa solusi yang diposting, tetapi dalam kasus saya, saya melakukan bilah status transparan dan memperbaiki posisi bilah tindakan dengan beberapa margin negatif
Dan saya gunakan di bilah alat dan tampilan root
sumber
Ada perpustakaan StatusBarUtil baik dari @laobie yang membantu dengan mudah menggambar gambar di StatusBar.
Cukup tambahkan
build.gradle
:Kemudian di set Aktivitas
Dalam tata letak
Untuk info lebih lanjut, unduh demo atau klon dari halaman github dan mainkan dengan semua fitur.
Catatan: Dukungan KitKat dan di atasnya.
Semoga itu bisa membantu orang lain!
sumber
Dengan Android Studio 1.4, proyek template dengan kode pelat ketel menetapkan
Overlay
tema di AppbarLayout dan / atau Toolbar Anda. Mereka juga diatur untuk diberikan di belakang bilah status denganfitSystemWindow
atribut = true. Ini akan menyebabkan hanya bilah alat yang dirender secara langsung di bawah bilah status dan yang lainnya akan ditampilkan di bawah bilah alat. Jadi solusi yang diberikan di atas tidak akan bekerja sendiri. Anda harus melakukan perubahan berikut.Masukkan kode berikut dalam file styles-21.xml Anda .
@android: warna / transparan
Tetapkan tema ini ke aktivitas yang mengandung laci navigasi di file AndroidManifest.xml .
Ini akan membuat laci Navigasi untuk ditampilkan di belakang bilah status transparan.
sumber
Yang perlu Anda lakukan adalah mengatur properti ini dalam tema Anda
sumber
Jawaban yang diterima bekerja untuk saya menggunakan CollapsingToolbarLayout. Penting untuk dicatat, yang
setSytstemUiVisibility()
mengabaikan semua panggilan sebelumnya ke fungsi itu. Jadi jika Anda menggunakan fungsi itu di tempat lain untuk tampilan yang sama, Anda harus menyertakanView.SYSTEM_UI_FLAG_LAYOUT_STABLE
danView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
tanda, atau mereka akan ditimpa dengan panggilan baru.Ini adalah kasus bagi saya, dan begitu saya menambahkan dua bendera ke tempat lain saya membuat panggilan
setSystemUiVisibility()
, jawaban yang diterima bekerja dengan sempurna.sumber
Saya akan menambahkan beberapa informasi lebih lanjut di sini. Perkembangan Android terbaru telah membuatnya cukup mudah untuk menangani banyak kasus di status bar. Berikut ini adalah pengamatan saya dari
styles.xml
<item name="android:windowTranslucentStatus">true</item>
akan membuat bilah status transparan dan ditampilkan di depan UI. Aktivitas Anda akan mengambil seluruh ruang di bagian atas.Warna latar belakang : sekali lagi, untuk SDK 21+,
<item name="android:statusBarColor">@color/your_color</item>
cukup memberikan warna pada bilah status Anda, tanpa memengaruhi yang lain.Namun, di perangkat yang lebih baru (Android M / +), ikon mulai datang dalam nuansa berbeda. OS dapat memberikan warna abu-abu yang lebih gelap ke ikon untuk SDK 23 / +, jika Anda menimpa
styles.xml
file Anda divalues-23
folder dan menambahkan<item name="android:windowLightStatusBar">true</item>
.Dengan cara ini, Anda akan memberi pengguna Anda dengan bilah status yang lebih terlihat, jika bilah status Anda memiliki warna terang (pikirkan bagaimana banyak aplikasi Google memiliki latar belakang cahaya namun ikon terlihat di sana dalam warna keabu-abuan).
Saya menyarankan Anda untuk menggunakan ini, jika Anda memberi warna ke bilah status Anda melalui titik # 2
Pada perangkat terbaru, SDK 29 / + hadir dengan sistem lampu lebar dan tema gelap, dapat dikontrol oleh pengguna. Sebagai devs, kita juga diharapkan untuk mengganti file style kita di
values-night
folder baru , untuk memberi pengguna 2 pengalaman berbeda.Di sini lagi, saya telah menemukan titik # 2 efektif dalam memberikan "warna latar belakang ke status bar". Tetapi sistem tidak mengubah warna ikon bilah status untuk aplikasi saya. karena versi hari saya dari gaya terdiri dari tema yang lebih terang, ini berarti bahwa pengguna akan mengalami visibilitas rendah (ikon putih pada latar belakang yang lebih terang)
Masalah ini dapat diselesaikan dengan menggunakan pendekatan titik # 3 atau dengan menimpa file gaya dalam
values-29
folder dan menggunakan yang lebih baru api<item name="android:enforceStatusBarContrast">true</item>
. Ini akan secara otomatis memaksakan warna abu-abu ke ikon, jika warna latar belakang Anda terlalu terang.sumber
Inilah tema yang saya gunakan untuk mencapai ini:
sumber
Solusi yang tepat adalah Mengubah properti dalam XML di bawah tag Aktivitas Anda ke gaya di bawah ini. Itu hanya bekerja
sumber