Saya ingin ScrollView memulai dari jauh ke bawah. Ada metode?
android
android-scrollview
Noah Seidman
sumber
sumber
Jawaban:
scroll.fullScroll(View.FOCUS_DOWN)
juga harus bekerja.Masukkan ini ke dalam a
scroll.Post(Runnable run)
Kode Kotlin
sumber
Anda harus menjalankan kode di dalam scroll.post seperti ini:
sumber
scroll.scrollTo(0, scroll.getHeight());
untuk melompat ke bawah, atauscroll.smoothScrollTo(0, scroll.getHeight());
untuk scroll yang lebih halusscrollView.post { scrollView.fullScroll(View.FOCUS_DOWN) }
scroll.fullScroll(View.FOCUS_DOWN)
akan mengarah pada perubahan fokus. Itu akan membawa beberapa perilaku aneh ketika ada lebih dari satu tampilan yang bisa fokus, misalnya dua EditText. Ada cara lain untuk pertanyaan ini.Ini bekerja dengan baik.
Perpanjangan Kotlin
sumber
Terkadang scrollView.post tidak berfungsi
TETAPI jika Anda menggunakan scrollView.postDelayed, itu pasti akan berfungsi
sumber
Apa yang paling berhasil bagi saya adalah
sumber
Saya menambahkan untuk bekerja dengan sempurna.
Catatan
Jawaban ini merupakan solusi untuk Android versi lama. Hari
postDelayed
ini tidak ada lagi bug dan Anda harus menggunakannya.sumber
postDelayed
:)Saya mencoba yang berhasil.
sumber
Saat tampilan belum dimuat, Anda tidak dapat menggulir. Anda dapat melakukannya 'nanti' dengan postingan atau panggilan tidur seperti di atas, tetapi ini tidak terlalu elegan.
Lebih baik untuk merencanakan gulir dan melakukannya pada onLayout berikutnya (). Contoh kode di sini:
https://stackoverflow.com/a/10209457/1310343
sumber
Satu hal yang perlu dipertimbangkan adalah apa yang TIDAK diatur. Pastikan kontrol anak Anda, terutama kontrol EditText, tidak memiliki properti RequestFocus yang ditetapkan. Ini mungkin salah satu properti yang ditafsirkan terakhir pada tata letak dan itu akan menimpa pengaturan gravitasi pada orang tuanya (tata letak atau ScrollView).
sumber
Berikut ini beberapa cara lain untuk menggulir ke bawah
Menggunakan
Jika Anda scrollview sudah ditata
Jika scrollview Anda belum selesai ditata (mis: Anda gulir ke bawah dalam
onCreate
metode Aktivitas ...)sumber
Bukan jawaban untuk pertanyaan itu, tetapi saya perlu menggulir ke bawah segera setelah EditText mendapatkan fokus. Namun jawaban yang diterima akan membuat ET juga kehilangan fokus segera (menurut saya ScrollView).
Solusi saya adalah sebagai berikut:
sumber
Saya benar-benar menemukan bahwa memanggil fullScroll dua kali berhasil:
Mungkin ada hubungannya dengan aktivasi metode post () setelah melakukan scroll pertama (tidak berhasil). Saya pikir perilaku ini terjadi setelah pemanggilan metode sebelumnya pada myScrollView, jadi Anda dapat mencoba mengganti metode fullScroll () pertama dengan hal lain yang mungkin relevan bagi Anda.
sumber
Menggunakan ada cara keren lain untuk melakukan ini dengan coroutine Kotlin. Keuntungan menggunakan coroutine yang bertentangan dengan Handler dengan runnable (post / postDelayed) adalah tidak menjalankan utas mahal untuk melakukan tindakan yang tertunda.
Penting untuk menentukan HandlerContext coroutine sebagai UI jika tidak, tindakan yang tertunda mungkin tidak dipanggil dari utas UI.
sumber
Dalam kasus itu hanya menggunakan scroll.scrollTo (0, sc.getBottom ()) tidak berfungsi, gunakan scroll.post
Contoh:
sumber
Salah satu kemungkinan alasan mengapa
scroll.fullScroll(View.FOCUS_DOWN)
mungkin tidak berfungsi bahkan dibungkus.post()
adalah karena tampilan tidak ditata. Dalam hal ini, View.doOnLayout () bisa menjadi opsi yang lebih baik:Atau, sesuatu yang lebih rumit untuk jiwa-jiwa pemberani: https://chris.banes.dev/2019/12/03/suspending-views/
sumber