Saya mengubah nilai EditText
on keyListener
.
Tetapi ketika saya mengubah teks kursor bergerak ke awal EditText
. Saya perlu kursor berada di akhir teks.
Cara memindahkan kursor ke akhir teks dalam a EditText
.
Saya mengubah nilai EditText
on keyListener
.
Tetapi ketika saya mengubah teks kursor bergerak ke awal EditText
. Saya perlu kursor berada di akhir teks.
Cara memindahkan kursor ke akhir teks dalam a EditText
.
EditText
s sebagai item dari aListView
. Adapun eksperimen, saya membuat beberapa perubahan padaListView
kode sumber itu sendiri, yang merupakan binatang yang agak kompleks, dan diuji pada emulator. Itu terkait dengan manajemen kontrol fokus yang dibuat oleh komponen. Jadi tentu saja itu bukan solusi yang bisa saya berikan untuk membantu teman kita. :)OnFocusChanged
panggilan balik. Solusinya adalah menempatkan setSelection di dalam runnable dan menjalankannya di utas utama. Lihat di sini stackoverflow.com/a/32156989/4514796Jawaban:
Coba ini:
sumber
onSelectionChanged()
metodeEditText
kelas:public void onSelectionChanged(int start, int end) { CharSequence text = getText(); if (text != null) { if (start != text.length() || end != text.length()) { setSelection(text.length(), text.length()); return; } } super.onSelectionChanged(start, end); }
Ada fungsi yang disebut append for ediitext yang menambahkan nilai string ke nilai edittext saat ini dan menempatkan kursor di akhir nilai. Anda dapat memiliki nilai string sebagai nilai ediitext saat itu sendiri dan memanggil append ();
sumber
myedittext.append("");
myedittext.append("");
tidak berhasil untuk saya!Selection
cara yang benar untuk mencapai IMO itu.Kotlin :
atur kursor ke posisi awal :
setel kursor ke akhir EditText :
Kode di bawah ini untuk menempatkan kursor setelah karakter kedua:
JAWA :
atur kursor ke posisi awal :
setel kursor ke akhir EditText :
Kode di bawah ini untuk menempatkan kursor setelah karakter kedua:
sumber
findViewById(R.id.edittext_id) as EditText
denganfindViewById<EditText>(R.id.edittext_id)
atau hanya menghindari casting jika menggunakanAPI 26+
Jika Anda menelepon
setText
sebelumnya dan teks baru tidak mendapatkan panggilan fase tata letaksetSelection
di runnable terpisah yang dipecat olehView.post(Runnable)
(repost dari topik ini ).Jadi, bagi saya kode ini berfungsi:
Sunting 05/16/2019: Saat ini saya sedang menggunakan ekstensi Kotlin untuk itu:
dan kemudian - editText.placeCursorToEnd ().
sumber
Anda juga bisa menempatkan kursor di akhir teks dalam
EditText
tampilan seperti ini:sumber
sumber
Ini adalah solusi lain yang mungkin:
Coba saja solusi ini jika tidak berhasil karena alasan apa pun:
sumber
Ini bekerja baik untuk saya!
sumber
Dalam kasus saya, saya membuat ext kotlin berikut. fungsinya, semoga bermanfaat bagi seseorang
Kemudian gunakan sebagai berikut
sumber
Jika EditText Anda tidak jelas:
atau
sumber
Anda harus dapat mencapainya dengan bantuan
EditText's
metodesetSelection()
, lihat di sinisumber
Saya pikir ini dapat mencapai apa yang Anda inginkan.
sumber
Pertanyaannya sudah lama dan dijawab, tetapi saya pikir mungkin ada manfaatnya untuk memiliki jawaban ini jika Anda ingin menggunakan alat DataBinding yang baru dirilis untuk Android, cukup tetapkan ini di XML Anda:
sumber
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
Kursorsumber
Jika Anda ingin memilih semua teks dan hanya memasukkan teks baru alih-alih yang lama, Anda dapat menggunakannya
sumber
Ini bekerja
sumber
editText.setSelection
adalah keajaiban di sini. Pada dasarnya pemilihan memberi Anda menempatkan kursor pada posisi apa pun yang Anda inginkan.Ini menempatkan kursor ke akhir EditText. Pada dasarnya
editText.getText().length()
memberi Anda panjang teks. Kemudian Anda gunakansetSelection
dengan panjang.editText.setSelection(0);
Ini untuk mengatur kursor pada posisi awal (0).
sumber
Semua kode lain yang saya uji tidak bekerja dengan baik karena fakta bahwa pengguna masih dapat menempatkan tanda sisipan / kursor di mana pun di tengah-tengah string (mis .: 12 | 3.00 - di mana | adalah kursor). Solusi saya selalu menempatkan kursor di akhir string setiap kali ada sentuhan pada EditText.
Solusi utamanya adalah:
@ string / jumlah = "0,00" @ string / zero_value = "0,00"
Semoga ini bisa membantu!
sumber
Untuk ViewModel, LiveData, dan Data binding
Saya membutuhkan fungsi ini untuk
EditText
dengan dukungan multiline di aplikasi catatan saya. Saya ingin kursor di akhir teks ketika pengguna menavigasi ke fragmen yang memiliki teks catatan.Solusi yang disarankan oleh djleop datang mendekat. Tetapi masalah dengan ini adalah bahwa, jika pengguna meletakkan kursor di suatu tempat di tengah teks untuk mengedit dan mulai mengetik, kursor akan melompat ke ujung teks lagi. Ini terjadi karena
LiveData
akan memancarkan nilai baru dan kursor akan melompat ke ujung teks lagi sehingga pengguna tidak dapat mengedit teks di suatu tempat di tengah.Untuk mengatasi ini, saya menggunakan
MediatorLiveData
dan menetapkan panjangString
hanya sekali menggunakan bendera. Ini akan menyebabkan LiveData membaca nilai hanya sekali, yaitu ketika pengguna menavigasi ke fragmen. Setelah itu pengguna dapat menempatkan kursor di mana saja mereka ingin mengedit teks di sana.ViewModel
Di sini,
yourObject
adalah LiveData lain yang diambil dari database yang menyimpan teks String yang Anda tampilkan diEditText
.Kemudian ikat ini
MediatorLiveData
ke EditText Anda menggunakan adaptor yang mengikat.XML
Menggunakan pengikatan data dua arah untuk menampilkan teks serta menerima input teks.
Binding Adapter
Event
kelasThe
Event
kelas di sini adalah seperti SingleLiveEvent ditulis oleh Jose Alcérreca dari Google. Saya menggunakannya di sini untuk menjaga rotasi layar. Menggunakan singleEvent
akan memastikan bahwa kursor tidak akan melompat ke akhir teks ketika pengguna mengedit teks di suatu tempat di tengah dan layar berputar. Ini akan mempertahankan posisi yang sama ketika layar berputar.Inilah
Event
kelasnya:Ini adalah solusi yang berfungsi untuk saya dan memberikan pengalaman pengguna yang baik. Semoga ini membantu dalam proyek Anda juga.
sumber
mirip dengan jawaban @Anh Duy, tetapi tidak berhasil untuk saya. saya juga membutuhkan kursor untuk pindah ke ujung hanya ketika pengguna mengetuk teks edit dan masih dapat memilih posisi kursor setelah itu, ini adalah satu-satunya kode yang bekerja untuk saya
sumber
Ini melakukan trik dengan aman :
sumber
sumber
Jawaban di atas tidak berhasil untuk saya. Jadi saya menemukan solusi baru. Ini mungkin membantu seseorang. Saya telah menggunakan versi terbaru Android Studio yaitu 3,5 sesuai tanggal sekarang. Mungkin itu mungkin alasan mengapa jawaban di atas tidak menunjukkan efek apa pun.
KODE:
Di sini, argumen 1 adalah nilai teks Spannable yang ingin Anda mainkan sedangkan argumen ke-2 adalah nilai indeks. Karena, kami ingin kursor di akhir teks, kami mengambil getText (). Length () yang mengembalikan panjang teks
sumber
Gunakan CustomEditText ini dalam file XML Anda, ini akan berfungsi. Saya telah menguji ini dan itu berfungsi untuk saya.
sumber
Jika Anda ingin menempatkan kursor di akhir teks dalam tampilan EditText
sumber