Saya ingin membuat tata letak yang memungkinkan saya gulir ke bawah menggunakan tata letak kendala, tapi saya tidak tahu bagaimana cara melakukannya. Haruskah ScrollView
menjadi orang tua ConstraintLayout
seperti ini?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.constraint.ConstraintLayout
android:id="@+id/Constraint"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Atau sebaliknya? Mungkin seseorang dapat mengarahkan saya ke tutorial yang bagus tentang hal ini atau memberikan contoh, sepertinya saya tidak dapat menemukannya.
Juga, saya tidak tahu apakah ini bug atau konfigurasi yang belum saya atur tetapi saya telah melihat gambar seperti ini:
di mana ada beberapa komponen di luar cetak biru "persegi panjang biru" namun mereka terlihat, sementara di sisi saya jika saya menempatkan komponen pada "ruang putih" Saya tidak bisa melihatnya atau memindahkannya ke mana saja, dan itu muncul di pohon komponen .
PEMBARUAN:
Saya menemukan cara untuk membuat tata letak kendala digulir dalam alat desain, menggunakan pedoman horizontal untuk menekan batas tata letak kendala dan memperluasnya di luar perangkat, setelah itu, Anda dapat menggunakan pedoman sebagai bagian baru dari tata letak kendala untuk jangkar komponen.
Ada jenis kendala yang merusak fungsi gulir:
Pastikan Anda tidak menggunakan batasan ini pada tampilan apa pun saat ingin Anda
ConstraintLayout
dapat digulir denganScrollView
:Jika Anda menghapus ini, gulir Anda akan berfungsi.
Penjelasan:
Mengatur tinggi anak agar sesuai dengan
ScrollView
orang tua bertentangan dengan apa yang harus dilakukan komponen. Yang kami inginkan sebagian besar waktu adalah untuk beberapa konten berukuran dinamis untuk dapat digulir ketika itu lebih besar dari layar / bingkai; mencocokkan tinggi dengan induknyaScrollView
akan memaksa semua konten untuk ditampilkan ke dalam bingkai tetap (ketinggian induk) sehingga membatalkan fungsi gulir.Ini juga terjadi ketika komponen anak langsung langsung diatur ke
layout_height="match_parent"
.Jika Anda ingin anak dari
ScrollView
mencocokkan ketinggian orangtua ketika tidak ada cukup konten, cukup setelandroid:fillViewport
ke true untukScrollView
.sumber
Gunakan NestedScrollView dengan viewport true berfungsi baik untuk saya
untuk android x gunakan ini
sumber
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Untuk meringkas, pada dasarnya Anda membungkus
android.support.constraint.ConstraintLayout
tampilan Anda diScrollView
dalam teks*.xml
file yang terkait dengan tata letak Anda.Contoh activity_sign_in.xml
Catatan 1: Bilah gulir hanya muncul jika bungkus diperlukan dengan cara apa pun, termasuk keyboard yang muncul.
Catatan 2: Ini juga bukan ide yang buruk untuk memastikan ConstraintLayout Anda cukup besar untuk mencapai bagian bawah dan samping layar tertentu, terutama jika Anda memiliki latar belakang, karena ini akan memastikan bahwa tidak ada ruang kosong yang aneh . Anda dapat melakukan ini dengan spasi jika tidak ada yang lain.
sumber
Cukup gunakan tata letak kendala di dalam
NestedScrollView
atauScrollView
.itu dia. nikmati pengkodean Anda.
sumber
Untuk membuat tata letak yang dapat digulir, tata letaknya benar. Ini tidak akan dapat digulir sampai ada alasan untuk menggulir (seperti pada tata letak lainnya). Jadi, tambahkan cukup konten dan itu akan dapat digulir, seperti halnya dengan tata letak apa pun (Linear, Relatif, dll). Namun, Anda tidak dapat menggulir dengan benar dalam Cetak Biru atau mode desain desain saat merancang dengan ConstraintLayout dan ScrollView.
Berarti:
Anda dapat membuat ConstraintLayout yang dapat digulir, tetapi itu tidak akan menggulir dengan benar di editor karena bug / skenario yang tidak dipertimbangkan. Tetapi meskipun bergulir tidak bekerja di editor, itu bekerja pada perangkat. (Saya telah membuat beberapa bergulir COnstraintLayouts, jadi saya telah mengujinya)
Catatan
Mengenai kode Anda. ScrollView tidak memiliki tag penutup, saya tidak tahu apakah itu yang terjadi pada file atau jika ini merupakan miss-paste-rindu, tetapi Anda mungkin ingin melihatnya.
sumber
Untuk melengkapi jawaban sebelumnya saya menambahkan contoh berikut, yang juga memperhitungkan penggunaan AppBar. Dengan kode ini, editor desain Android Studio tampaknya berfungsi baik dengan ConstraintLayout.
sumber
Anda perlu dikelilingi tata letak kendala saya dengan tag ScrollView dan memberikannya properti android: isScrollContainer = "true".
sumber
Ada bug di versi 2.2 yang membuatnya tidak mungkin untuk menggulir ConstraintLayout. Saya kira itu masih ada. Anda dapat menggunakan LinearLayout atau RelativeLayout sebagai alternatif.
Juga, periksa: Apakah mungkin untuk menempatkan tata letak kendala di dalam ScrollView .
sumber
Constraintlayout adalah Default untuk aplikasi baru. Saya "belajar untuk Android" sekarang dan memiliki waktu yang sangat sulit mencari tahu bagaimana menangani kode "sampel" default untuk menggulir ketika keyboard menyala. Saya telah melihat banyak aplikasi di mana saya harus menutup keyboard untuk mengklik tombol "kirim" dan kadang-kadang tidak hilang. Menggunakan hierarki [ScrollView / ContraintLayout / Fields] ini berfungsi dengan baik sekarang. Dengan cara ini kita dapat memperoleh manfaat dan kemudahan penggunaan dari ConstraintLayout dalam tampilan yang dapat digulir.
sumber
Keluarkan tombol bawah dari nestedscrollview dan ambil linearlayout sebagai orangtua. Tambahkan bawah dan nestedscrollview sebagai anak-anak mereka. Ini akan bekerja dengan sangat baik. Manifes untuk aktivitas gunakan ini - ini akan menaikkan tombol ketika keyboard dibuka
sumber
Anda dapat menggunakan
HorizontalScrollView
dan itu akan berhasil juga!sumber
Inilah cara saya mengatasinya:
Jika Anda menggunakan Nested ScrollView, yaitu ScrollView di dalam ConstraintLayout, gunakan konfigurasi berikut untuk ScrollView alih-alih "WRAP_CONTENT" atau "MATCH_PARENT":
sumber
di scrollview, buat tinggi dan lebar 0 tambahkan kendala Top_toBottomOfand Bottom_toTopOf itu saja.
sumber
Bagi saya, tidak ada saran tentang menghapus batasan bawah atau mengatur wadah gulir ke true sepertinya berfungsi. Apa yang berhasil: perluas ketinggian tampilan individual / bersarang di tata letak saya sehingga mereka "membentang" di luar induk dengan menggunakan opsi "Expand Vertically" dari Constraint Layout Editor seperti yang ditunjukkan di bawah ini.
Untuk pendekatan apa pun, penting bahwa garis pratinjau bertitik memperpanjang secara vertikal melampaui dimensi atas atau bawah orangtua
sumber