Berapa ketinggian bilah status di Android? Apakah selalu sama?
Dari pengukuran saya sepertinya 25dp, tapi saya tidak yakin apakah itu memiliki ketinggian yang sama di semua platform.
(Saya ingin tahu ini untuk mengimplementasikan transisi fade dari aktivitas yang tidak memiliki status bar ke yang benar)
Jawaban:
pertanyaan ini dijawab sebelum ... Tinggi statusbar?
Perbarui ::
Metode saat ini:
ok, ketinggian bilah status tergantung pada ukuran layar, misalnya pada perangkat dengan ukuran layar 240 X 320 tinggi bilah status adalah 20px, untuk perangkat dengan ukuran layar 320 X 480 tinggi bilah status adalah 25px, untuk perangkat dengan 480 x 800 tinggi status bar harus 38px
jadi saya sarankan untuk menggunakan skrip ini untuk mendapatkan ketinggian bilah status
(Metode lama) untuk mendapatkan Ketinggian bilah status pada
onCreate()
metode Aktivitas Anda, gunakan metode ini:sumber
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
bukan cara yang benar untuk mendapatkan ketinggian bilah status jika Anda berada dalam mode multi-jendela + rotasi potret + jendela kedua. Anda akan mendapatkan nilai yang sangat besar (termasuk ketinggian 1).Dari semua contoh kode yang saya gunakan untuk mendapatkan ketinggian bilah status, satu-satunya yang benar-benar berfungsi dalam
onCreate
metodeActivity
adalah:Rupanya ketinggian sebenarnya dari bilah status disimpan sebagai sumber daya Android. Kode di atas dapat ditambahkan ke
ContextWrapper
kelas (mis. AnActivity
).Ditemukan di http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
sumber
Pada perangkat MDPI, bilah status adalah 25px. Kita dapat menggunakan ini sebagai basis dan mengalikannya dengan densitas (dibulatkan ke atas) untuk mendapatkan ketinggian bilah status di perangkat apa pun:
Untuk referensi: ldpi = .75, mdpi = 1, hdpi = 1.5, xhdpi = 2
sumber
Hardcoding ukuran atau menggunakan refleksi untuk mendapatkan nilai
status_bar_height
dianggap praktik buruk. Chris Banes membicarakan hal ini di Droidcon New York . Cara yang disarankan untuk mendapatkan ukuran bilah status adalah melalui OnApplyWindowInsetsListener :Ini ditambahkan dalam API 20 dan juga di-backport melalui ViewAppCompat .
sumber
Saya telah menggabungkan beberapa solusi bersama:
alternatif lain:
EDIT: Alternatif untuk menjalankanJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
sumber
Menurut pedoman desain Google ; ketinggian bar status adalah 24 dp.
Jika Anda ingin mendapatkan ketinggian bilah status dalam piksel, Anda dapat menggunakan metode di bawah ini:
yang dapat dipanggil dari aktivitas dengan:
sumber
Ketinggian default dulu 25dp. Dengan Android Marshmallow (API 23) tingginya dikurangi menjadi 24dp.
Pembaruan: Perlu diketahui bahwa sejak jaman notch dan keseluruhan kamera mulai, menggunakan ketinggian statis untuk bilah status tidak lagi berfungsi. Silakan gunakan inset jendela sebagai gantinya!
sumber
ini juga bekerja dengan tautan referensi
sumber
Saya memiliki masalah yang sama karena harus mendapatkan tinggi bilah status di onCreate. Ini bekerja untuk saya.
Di dalam onCreate:
Lihat:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
sumber
Tinggi resmi adalah
24dp
, sebagaimana dinyatakan secara resmi oleh Google di laman web Desain Android .sumber
Ya ketika saya mencobanya dengan Lihat itu memberikan hasil 25px. Ini seluruh kodenya:
sumber
sumber
Coba ini:
itu tidak bekerja untuk saya dalam metode onCreate untuk aktivitas, tetapi ketika saya memasukkannya ke dalam onClickListener dan memberi saya pengukuran 25
sumber
ketinggian bilah status adalah 24dp di android 6.0
Anda dapat menemukan jawabannya di kode sumber: frameworks \ base \ core \ res \ res \ values \ dimens.xml
sumber
@android:dimen/status_bar_height
tidak bekerja untuk sayaUntuk mengatasi ini, saya menggunakan pendekatan kombinasi. Ini diperlukan karena pada tablet bilah sistem sudah mengurangi pikselnya ketika display.getHeight () dipanggil. Jadi saya pertama kali memeriksa apakah ada bilah sistem, dan kemudian pendekatan Ben Claytons, yang berfungsi dengan baik pada ponsel.
sumber
Berkat @Niklas +1 ini adalah cara yang benar untuk melakukannya.
Maafkan saya jika kodenya tidak 100% benar, konversikan dari Xamarin C # tetapi ini adalah haknya. Bekerja dengan Takik, dll.
sumber
Solusi Layar Penuh Toggled:
Solusi ini mungkin terlihat seperti solusi, tetapi sebenarnya memperhitungkan apakah aplikasi Anda layar penuh (alias menyembunyikan bilah status) atau tidak:
Dengan cara ini, jika aplikasi Anda saat ini layar penuh,
barheight
akan sama dengan 0.Secara pribadi saya harus menggunakan ini untuk memperbaiki koordinat TouchEvent absolut untuk memperhitungkan bilah status sebagai berikut:
Dan itu akan mendapatkan koordinat y mutlak apakah aplikasi fullscreen atau tidak.
Nikmati
sumber
Pada Android 4.1 dan lebih tinggi, Anda dapat mengatur konten aplikasi Anda agar muncul di belakang bilah status, sehingga konten tidak mengubah ukuran ketika bilah status menyembunyikan dan menunjukkan. Untuk melakukan ini, gunakan SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Anda juga mungkin perlu menggunakan SYSTEM_UI_FLAG_LAYOUT_STABLE untuk membantu aplikasi Anda mempertahankan tata letak yang stabil.
Saat Anda menggunakan pendekatan ini, menjadi tanggung jawab Anda untuk memastikan bahwa bagian-bagian penting dari UI aplikasi Anda (misalnya, kontrol bawaan dalam aplikasi Maps) tidak berakhir dicakup oleh bilah sistem. Ini bisa membuat aplikasi Anda tidak dapat digunakan. Dalam kebanyakan kasus, Anda dapat menangani ini dengan menambahkan atribut android: fitsSystemWindows ke file tata letak XML Anda, atur true. Ini menyesuaikan bantalan ViewGroup induk untuk memberikan ruang bagi sistem windows. Ini cukup untuk sebagian besar aplikasi.
Namun, dalam beberapa kasus, Anda mungkin perlu memodifikasi lapisan default untuk mendapatkan tata letak yang diinginkan untuk aplikasi Anda. Untuk memanipulasi secara langsung bagaimana konten Anda ditampilkan relatif terhadap bilah sistem (yang menempati ruang yang dikenal sebagai "insets konten" jendela), ganti fitSystemWindows (insets Rect). Metode fitSystemWindows () dipanggil oleh hierarki tampilan ketika inset konten untuk jendela telah berubah, untuk memungkinkan jendela menyesuaikan isinya. Dengan mengganti metode ini Anda dapat menangani insets (dan karenanya tata letak aplikasi Anda) seperti yang Anda inginkan.
formulir: https://developer.android.com/training/system-ui/status.html#behind
sumber
Jika Anda tahu persis ukuran VS tinggi
Suka
misalnya dalam perangkat dengan ukuran layar 320 X 480 tinggi status bar adalah 25px, untuk perangkat dengan 480 x 800 tinggi bar status harus 38px
maka Anda hanya bisa mendapatkan lebar tampilan Anda / ukuran layar Anda hanya bisa menggunakan pernyataan if else untuk mendapatkan ketinggian bilah status
sumber
Alasan mengapa jawaban teratas tidak berfungsi untuk sebagian orang adalah karena Anda tidak bisa mendapatkan dimensi tampilan hingga siap untuk ditampilkan. Gunakan a
OnGlobalLayoutListener
untuk mendapatkan dimensi tersebut saat Anda benar-benar dapat:Ini adalah metode yang paling dapat diandalkan.
sumber
Karena mode multi-jendela tersedia sekarang, aplikasi Anda mungkin tidak memiliki bilah status di atas.
Solusi berikut menangani semua kasing secara otomatis untuk Anda.
atau secara terprogram
Anda juga dapat memperoleh tampilan root dengan
Untuk detail lebih lanjut tentang mendapatkan rujukan tampilan root - https://stackoverflow.com/a/4488149/9640177
sumber
Masalah ini baru-baru ini menjadi relevan bagi saya karena takik di Pixel 3XL saya. Saya benar-benar menyukai solusi pengembang android , tetapi saya ingin bisa mendapatkan ketinggian status bar sesuai keinginan, karena itu secara khusus diperlukan untuk animasi layar penuh yang harus saya mainkan. Fungsi di bawah ini mengaktifkan kueri yang andal:
Dan kemudian di kelas aktivitas:
Anda tentu saja ingin membuat referensi yang lemah dari aktivitas ke parameter metode kelas Helper statis, tetapi demi singkatnya saya menahan diri dalam contoh ini. Itu
blurBitmap
danerrorHudFrameLayout
dihilangkan karena alasan yang sama, karena mereka tidak secara langsung berkaitan dengan mendapatkan ketinggian bilah status.sumber
Versi Kotlin yang menggabungkan dua solusi terbaik
status_bar_height
nilai jika adastatus_bar_height
tidak ada, hitung ketinggian bilah status dari Dekorasi jendelasumber