Kata Pengantar
Belum lama ini, saya membaca artikel tentang Bottom Sheet, dan setelah berkonsultasi dengan rekan kerja, saya memutuskan untuk mengimplementasikan hal ini dalam aplikasi kami. Setelah menghabiskan cukup waktu untuk mengajar Bottom Sheet bagaimana bepergian dalam beberapa langkah (seperti Google Maps), saya menyadari kebodohan dan keterbatasannya. Dua solusi ditemukan: untuk membungkus semuanya dalam aliran yang akan memantau keadaan tirai memanjang secara real time atau menulis ulang beberapa metode kelas BottomSheetBehavior (untungnya, lisensi Apache 2.0 memungkinkan Anda untuk melakukan ini). Saya memilih opsi kedua, karena menurut saya lebih layak, dan sekarang, berdasarkan pengalaman saya, saya akan mencoba memberi tahu Anda apa yang datang dari itu. Saya harap ini bermanfaat bagi seseorang. Baiklah, mari kita mulai.
Kustomisasi
Saya melewatkan langkah-langkah membuat proyek, menambahkan Lembar Bawah Google ke dalamnya, karena jika Anda membaca ini, maka Anda telah mengatasi semua hal di atas. Kita harus pergi ke kelas BottomSheetBehavior dan menyalin isinya ke kelas CustomBottomSheetBehavior baru yang kita buat. Setelah disalin, jangan lupa untuk mengganti nama semua yang ditandai dengan warna merah. Juga, dalam file .xml dari BottomSheet kami, kami harus mengganti nama baris ini, merujuk ke kelas baru kami, itu akan menghasilkan sesuatu seperti ini:
app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior"
Jadi, kami memiliki 700+ baris kode Java yang terlihat menyeramkan, jadi apa yang Anda lakukan dengannya?
Pertama, Anda perlu menemukan metode onViewReleased ():
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... }
Kita perlu mengubah hanya beberapa baris. Kami menemukan yang pertama jika {...} dan mengganti kontennya dengan kode ini:
if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } }
Sekarang BottomSheet kami maju dalam 2 tahap, berhenti di tengah:
(
)
Perubahan tinggi
Tapi itu belum semua, Anda dapat menyesuaikan ketinggian rata-rata. Untuk melakukan ini, cari semua yang ada di kelas yang sama untuk menginisialisasi variabel halfExpandedOffset:
this.halfExpandedOffset = this.parentHeight / 2;
Saat melihat garis ini, menjadi jelas bahwa kita dapat menyesuaikan ketinggian sesuai keinginan, bahkan dalam bentuk persentase. Secara pribadi, saya lebih suka berubah seperti ini:
this.halfExpandedOffset = this.parentHeight * 60 / 100;
(
)
BottomSheet saya mencapai 40% dari ketinggian Tampilan utama. Itu saja!