Apakah ada cara untuk menggulir ScrollView
program ke posisi tertentu?
Saya telah membuat dinamis TableLayout
yang ditempatkan di a ScrollView
. Jadi saya ingin itu pada tindakan tertentu (seperti mengklik Tombol, dll.) Baris tertentu harus gulir secara otomatis ke posisi teratas.
Apa itu mungkin?
java
android
scrollview
android-scrollview
Arun Badole
sumber
sumber
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
Jawaban dari Pragna tidak selalu berhasil, coba ini:
atau
jika Anda ingin menggulir untuk memulai
sumber
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
dengan kesuksesan.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
sini?Saya ingin scrollView untuk menggulir langsung setelah onCreateView () (bukan setelah misalnya klik tombol). Untuk membuatnya berfungsi, saya perlu menggunakan ViewTreeObserver:
Namun berhati-hatilah bahwa ini akan dipanggil setiap kali sesuatu ditata (misalnya jika Anda menetapkan tampilan tidak terlihat atau serupa) jadi jangan lupa untuk menghapus pendengar ini jika Anda tidak membutuhkannya lagi dengan:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
pada SDK Lvl <16atau
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
di SDK Lvl> = 16sumber
Ada banyak jawaban bagus di sini, tetapi saya hanya ingin menambahkan satu hal. Terkadang Anda ingin menggulir ScrollView ke tampilan tata letak tertentu, alih-alih gulir penuh ke atas atau bawah.
Contoh sederhana: dalam formulir pendaftaran, jika pengguna mengetuk tombol "Daftar" ketika teks edit formulir tidak diisi, Anda ingin menggulir ke teks edit khusus itu untuk memberi tahu pengguna bahwa ia harus mengisi bidang itu.
Dalam hal ini, Anda dapat melakukan sesuatu seperti itu:
atau, jika Anda menginginkan gulir yang lancar dan bukan gulir instan:
Jelas Anda dapat menggunakan jenis tampilan apa pun alih-alih Edit Teks. Perhatikan bahwa getBottom () mengembalikan koordinat tampilan berdasarkan tata letak induknya, sehingga semua tampilan yang digunakan di dalam ScrollView hanya boleh memiliki induk (misalnya Tata Letak Linear).
Jika Anda memiliki banyak orang tua di dalam anak ScrollView, satu-satunya solusi yang saya temukan adalah dengan memanggil requestChildFocus pada tampilan induk:
tetapi dalam hal ini Anda tidak dapat memiliki gulungan yang lancar.
Saya harap jawaban ini dapat membantu seseorang dengan masalah yang sama.
sumber
Gunakan sesuatu seperti ini:
atau
sumber
Coba gunakan
scrollTo
metode More Infosumber
Jika Anda ingin menggulir secara instan maka Anda dapat menggunakan:
Atau jika Anda ingin menggulir dengan lancar dan perlahan sehingga Anda dapat menggunakan ini:
sumber
catch
blok itu lakukan?** untuk menggulir ke ketinggian yang diinginkan. Saya telah menemukan beberapa solusi bagus **
sumber
Saya dapat ini untuk menggulir ke bagian bawah ScrollView (dengan TextView di dalamnya):
(Saya menempatkan ini pada metode yang memperbarui TextView)
sumber
Ya kamu bisa.
Katakanlah Anda punya satu
Layout
dan di dalamnya, Anda punya banyakViews
. Jadi jika Anda ingin menggulir keView
program apa pun , Anda harus menulis cuplikan kode berikut:Sebagai contoh:
content_main.xml
MainActivity.java
Jika Anda ingin menggulir ke spesifik
View
, katakanlah txtview , dalam hal ini, cukup tulis:Dan kamu sudah selesai.
sumber
Catatan: jika Anda sudah berada di utas, Anda harus membuat utas pos baru, atau tidak menggulir tinggi panjang baru sampai akhir penuh (untuk saya). Misalnya:
sumber
Menambahkan jawaban lain yang tidak melibatkan koordinat.
Ini akan membuat tampilan yang Anda inginkan menjadi fokus (tetapi tidak ke posisi atas):
child - Anak dari ViewParent ini yang ingin fokus. Tampilan ini akan berisi tampilan fokus. Belum tentu pandangan yang benar-benar memiliki fokus.
terfokus - Pandangan yang merupakan keturunan anak yang sebenarnya memiliki fokus
sumber
cukup gulir halaman:
sumber
Semua orang memposting jawaban yang begitu rumit.
Saya menemukan jawaban yang mudah, untuk menggulir ke bawah, dengan baik:
Dan, jika perlu, Anda bisa meletakkan baris kode kedua, di atas, ke dalam runnable:
Saya butuh banyak penelitian dan bermain-main untuk menemukan solusi sederhana ini. Saya harap ini membantu Anda juga! :)
sumber
Saya menggunakan Runnable dengan sv.fullScroll (View.FOCUS_DOWN); Ini berfungsi sempurna untuk masalah langsung, tetapi metode itu membuat ScrollView mengambil Fokus dari seluruh layar, jika Anda membuat AutoScroll itu terjadi setiap kali, tidak ada EditText akan dapat menerima informasi dari pengguna, solusi saya menggunakan kode yang berbeda di bawah runnable:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
membuat hal yang sama tanpa kehilangan fokus pada pandangan-pandangan penting
Salam pembuka.
sumber
ini bekerja untuk saya
sumber
sumber
sumber