Tembus di android dan sesuaikanResize


Kemampuan menggunakan tembus cahaya di android muncul di KITKAT . Dan itu terlihat cukup mengesankan dalam desain yang tepat. Dan dengan munculnya mode untuk perangkat dengan "Bangs", tampaknya hanya hal yang diperlukan dalam setiap startup lampu hangat.


Mari kita bayangkan sebuah situasi: Anda telah menangkap desain keren yang jatuh di bawah StatusBar dan NavigationBar. Jadi Anda menambahkan bidang input dan memahami bahwa AdjustResize tidak berfungsi untuk Anda.


Anda bisa:


  1. Untuk palu, - pengguna akan menutup keyboard sendiri untuk melihat apa yang ada di bawahnya.
  2. Menolak dari tembus cahaya , gaya bukan milikmu, semuanya akan menjadi tua, dapat diandalkan, seperti orang lain.
  3. Segera setelah pengguna mulai menggulir, sembunyikan keyboard. Anda selesai! Mereka melakukan segalanya dengan benar, skype melakukannya bahkan di bawah ios! Dan tidak ada transparansi di sana.
  4. Pindahkan semua bidang input ke layar terpisah. Sebagai bonus - setiap transisi ekstra ke layar, tanpa kenyamanan dan konversi.
  5. Siram AdjustResize Anda.

Semua kesulitan tembus


Ada beberapa kesulitan dengan menerapkan tembus :


  1. Penting untuk mempertimbangkan desain untuk perangkat yang lebih kecil dari KITKAT (saya pikir pada tahun 2019, ini hampir tidak relevan, terutama untuk proyek-proyek baru). Mungkin untuk perangkat yang lebih kecil dari LOLLIPOP, mungkin gim ini tidak sepadan dengan lilinnya? Di sana Anda tidak bisa mendapatkan NavigationBar transparan dan "Chulok" pada perangkat semacam itu juga tidak ada.
  2. Jika Anda berpikir tentang tembus , maka kemungkinan besar Anda menginginkan sesuatu yang lebih rumit daripada latar belakang statis, sesuatu yang bergulir di bawah StatusBar dan NavigationBar, sesuatu yang tidak dapat dilakukan dengan cocokSystemWindows , yang berarti Anda harus mengganti ketinggian StatusBar dan NavigationBar secara dinamis.
  3. Dan akhirnya, hal utama: AdjustResize hanya berfungsi tanpa tembus cahaya atau bagi orang-orang yang sesuai tampilanSystemWindows .

Tentang apa dan bagaimana cara kerjanya



Pemecahan masalah


Tampaknya menjadi solusi sederhana: adjustResize tidak berfungsi, jadi Anda perlu menanggapi pembukaan keyboard sendiri. Tetapi masalah dengan android tidak hanya memberikan ketinggian keyboard yang terbuka (dan itu bisa berbeda bahkan untuk bidang EditText yang berbeda), tetapi bahkan fakta pembukaan atau penutupannya. Tidak ada cara resmi. Bagaimana bisa google?


Tentu ada solusinya! Dan ketika Anda memiliki informasi tentang ketinggian keyboard saat ini, Anda dapat melakukan apa pun yang Anda inginkan dengannya: tambahkan padding atau margin dari bawah untuk tampilan yang seharusnya menanggapi keyboard dan sekarang penyesuaian kustomResize sudah siap.


Kode


Untuk memahami bahwa keyboard terbuka, OnGlobalLayoutListener digunakan. Tempel potongan kode di postingan saya tidak mengerti maksudnya. Mengapa menulis 100 baris dari apa yang dinyatakan dalam 50 kode?
Solusinya disajikan dalam repositori .


Lihatlah KeyboardHeightProvider dan BaseTranslucentActivity .


Proyek ini sesederhana mungkin, dapat dimengerti, tidak ada yang berlebihan di dalamnya yang tidak berlaku untuk masalah tersebut.
Ada contoh untuk TextView, RecyclerView, dan ScrollView sederhana. Teknik yang sama telah diuji dan berfungsi baik untuk NestedScrollView, NestedFragments, CoordinatorLayout, ViewPager, dll.


Ps: https://developer.android.com/reference/android/view/WindowInsets tidak menyelesaikan masalah keyboard lebih buruk.

Source: https://habr.com/ru/post/id436646/


All Articles