Saya telah melihat dalam spesifikasi desain material Side Nav baru bahwa Anda dapat menampilkan laci di atas panel tindakan dan di belakang panel status. Bagaimana saya bisa menerapkan ini?
android
navigation-drawer
android-appcompat
Chris Banes
sumber
sumber
Jawaban:
Fungsionalitas baru dalam kerangka kerja dan dukungan lib memungkinkan ini terjadi. Ada tiga 'kepingan puzzle':
fitsSystemWindows
sehingga diletakkan di belakang bilah sistem.Theme.Material
pewarnaan bilah status normal sehingga DrawerLayout dapat menggambar di sana.Saya akan berasumsi bahwa Anda akan menggunakan appcompat baru.
Pertama, tata letak Anda akan terlihat seperti ini:
Kemudian di Aktivitas / Fragmen Anda:
Maka Anda perlu memastikan bahwa DrawerLayout terlihat di belakang bilah status. Anda melakukannya dengan mengubah nilai-v21 tema Anda:
values-v21 / themes.xml
Catatan: Jika a
<fragment android:name="fragments.NavigationDrawerFragment">
digunakan sebagai gantitata letak yang sebenarnya, efek yang diinginkan akan tercapai jika Anda memanggil
fitsSystemWindows(boolean)
tampilan yang Anda kembali darionCreateView
metode.sumber
DrawerLayout
perlu diletakkan di belakang panel sistem. Anda kemudian perlu mengaturnya pada tampilan laci sehinggaDrawerLayout
meletakkannya di dalam insets jendela.layout_marginTop
di root tata letak konten laci Anda. Jika tidak, latar belakang tata letak konten laci Anda akan digambar di atas bilah status, dan yang lainnya akan didorong ke bawah. Namun ini sepertinya solusi yang agak kotor, sejauh yang saya tahu tidak ada? Attr / statusBarSize atau yang seperti itu disediakan oleh Android.EDIT: Perpustakaan Dukungan Desain baru mendukung ini dan metode sebelumnya tidak lagi diperlukan.
Ini sekarang dapat dicapai menggunakan Perpustakaan Dukungan Desain Android baru .
Anda dapat melihat aplikasi sampel Cheesesquare oleh Chris Banes yang melakukan demo semua fitur baru.
Metode sebelumnya:
Karena tidak ada solusi lengkap yang diposting, berikut adalah cara saya mencapai hasil yang diinginkan.
Pertama, sertakan ScrimInsetsFrameLayout dalam proyek Anda.
Kemudian buat yang gaya agar
insetForeground
bisa diatur.nilai / attrs.xml
Memperbarui file xml aktivitas Anda dan pastikan
android:fitsSystemWindows
diatur ke benar pada keduaDrawerLayout
sertaScrimInsetsFrameLayout
.tata letak / activity_main.xml
Di dalam metode onCreate aktivitas Anda, atur warna latar belakang bilah status pada tata letak laci.
MainActivity.java
Terakhir perbarui tema aplikasi Anda sehingga
DrawerLayout
ada di belakang bilah status.values-v21 / styles.xml
Hasil:
sumber
Dengan rilis Perpustakaan Dukungan Android terbaru (rev 22.2.0), kami memiliki Perpustakaan Dukungan Desain dan sebagai bagian dari ini tampilan baru bernama NavigationView . Jadi alih-alih melakukan semuanya sendiri dengan
ScrimInsetsFrameLayout
dan semua hal lain, kita cukup menggunakan pandangan ini dan semuanya dilakukan untuk kita.Contoh
Langkah 1
Tambahkan
Design Support Library
kebuild.gradle
file AndaLangkah 2
Tambahkan
NavigationView
keDrawerLayout
:Langkah 3
Buat sumber daya menu baru
/res/menu
dan tambahkan item dan ikon yang ingin Anda tampilkan:Langkah 4
Init the NavigationView dan tangani acara klik:
Langkah 5
Pastikan untuk set
android:windowDrawsSystemBarBackgrounds
danandroid:statusBarColor
divalues-v21
lain Laci Anda memenangkan `t ditampilkan "bawah" StatusBarLangkah Opsional
Tambahkan Header ke NavigationView. Untuk ini, cukup buat layout baru dan tambahkan
app:headerLayout="@layout/my_header_layout"
ke NavigationView.Hasil
Catatan
colorPrimary
atributtextColorPrimary
atributtextColorSecondary
atributAnda juga dapat memeriksa contoh aplikasi oleh Chris Banes yang menyoroti NavigationView bersama dengan pandangan baru lainnya yang merupakan bagian dari Perpustakaan Dukungan Desain (seperti FloatingActionButton , TextInputLayout , Snackbar , TabLayout dll.)
sumber
<item name="itemTextColor">@color/YOUR_COLOR</item>
<item name="itemIconTint">@color/YOUR_COLOR</item>
Toolbar
- tidak ada cara untuk melakukan ini denganActionBar
mDrawerLayout.openDrawer(GravityCompat.START);
mana pun Anda mau. Jika Anda menggunakanActionBarDrawerToggle
ini harus dilakukan secara otomatis segera setelah Anda mengklik ikon hamburger.Buat itu berfungsi, dalam nilai-v21 gaya atau tema xml perlu menggunakan atribut ini:
<item name="android:windowTranslucentStatus">true</item>
Itu membuat keajaiban!
sumber
Semua pendekatan di atas benar dan mungkin berhasil. Saya telah membuat demo yang berfungsi mengikuti panduan di atas dan diuji pada 2.x hingga 5.x
Anda dapat mengkloning dari Github
Yang penting untuk dimainkan adalah di Main Activity
dan telepon kembali
Absolutely the Theme untuk V21 melakukan keajaiban
dan ScrimInsetsFrameLayout
Sekarang ini menjadi lebih mudah dengan perpustakaan Dukungan Desain baru
klon dari @Chris Banes https://github.com/chrisbanes/cheesesquare
sumber
Semua jawaban yang disebutkan di sini terlalu lama dan panjang. Solusi terbaik dan pendek yang bekerja dengan Navigationview terbaru adalah
ini akan mengubah warna bilah status Anda menjadi transparan saat Anda membuka laci
Sekarang ketika Anda menutup laci Anda perlu mengubah warna bilah status lagi menjadi gelap. Jadi Anda bisa melakukannya dengan cara ini.
dan kemudian di tata letak utama tambahkan satu baris yaitu
dan tata letak laci Anda akan terlihat seperti
dan tampilan navigasi Anda akan terlihat seperti
Saya telah mengujinya dan berfungsi sepenuhnya. Semoga bisa membantu seseorang. Ini mungkin bukan pendekatan terbaik tetapi bekerja dengan lancar dan mudah diterapkan. Tandai jika itu membantu. Selamat coding :)
sumber
Saya Menggunakan Perpustakaan Dukungan Desain. Dan hanya dengan menggunakan tema khusus, saya mendapatkan Status Bar transparan ketika Dibuka Navigasi Drawer.
Akhirnya tambahkan tema di File Manifest
Jangan lupa untuk menggunakan properti,
android:fitsSystemWindows="true"
di "DrawerLayout"sumber
Ini yang paling sederhana, dan itu berhasil untuk saya:
Dalam nilai-21:
Dalam nilai:
Dan atur ke toolbar Anda
sumber
24dp
margin atas.Alih-alih menggunakan
ScrimInsetsFrameLayout
... Bukankah lebih mudah untuk hanya menambahkan tampilan dengan ketinggian tetap24dp
dan latar belakangprimaryColor
?Saya mengerti bahwa ini melibatkan menambahkan pandangan boneka dalam hierarki, tetapi tampaknya lebih bersih bagi saya.
Saya sudah mencobanya dan berhasil.
sumber
Coba dengan ini:
gaya:
Kegiatan Utama memperluas ActionBarActivity
Sekarang Anda bisa
onCreateOptionsMenu
seperti ActionBar biasa dengan ToolBar.Ini Layout saya
Semoga Anda mengerti! Bersenang-senang!
sumber