Bagaimana cara mendeteksi peristiwa kunci delete (backspace) untuk editText? Saya sudah mencoba menggunakan TextWatcher, tetapi ketika editText kosong, ketika saya menekan tombol delete, tidak ada yang terjadi. Saya ingin mendeteksi delete key press foe editText bahkan jika tidak ada teks.
android
events
android-edittext
key
Buda Gavril
sumber
sumber
event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL
jika Anda tidak ingin acara untuk menembak dua kali per tekan backspaceSudah lama sejak Anda bertanya tetapi saya memiliki masalah yang sama. Seperti yang telah disebutkan oleh Estel, masalah dengan pendengar utama adalah bahwa mereka hanya bekerja dengan keyboard perangkat keras. Untuk melakukan ini dengan IME (keyboard lunak) , solusinya sedikit lebih rumit.
Metode tunggal kita benar-benar ingin override adalah
sendKeyEvent
diEditText
'sInputConnection
kelas. Metode ini dipanggil saat peristiwa penting terjadi dalam IME. Tetapi untuk menimpanya, kita perlu mengimplementasikan kustomEditText
yang menggantikanonCreateInputConnection
metode, membungkusInputConnection
objek default dalam kelas proxy! : |Kedengarannya rumit, tetapi inilah contoh paling sederhana yang bisa saya buat:
Baris dengan panggilan ke
setRandomBackgroundColor
adalah tempat tindakan backspace khusus saya terjadi. Dalam hal ini, mengubahEditText
warna latar belakang.Jika Anda memekarkan ini dari XML ingatlah untuk menggunakan nama paket lengkap sebagai tag:
sumber
Ini hanyalah tambahan untuk jawaban Idris, menambahkan override ke deleteSurroundingText juga. Saya menemukan info lebih lanjut tentang itu di sini: Android: Backspace di WebView / BaseInputConnection
sumber
deleteSurroundingText
bit adalah persis apa yang saya butuhkan setelah mencoba banyak solusi lain.Inilah solusi mudah saya, yang berfungsi untuk semua API:
PERBARUI 17.04.18 .
Seperti yang ditunjukkan dalam komentar, solusi ini tidak melacak pers backspace jika EditText kosong (sama seperti sebagian besar solusi lainnya).
Namun, itu cukup untuk sebagian besar kasus penggunaan.
NB Jika saya harus membuat sesuatu yang serupa hari ini, saya akan melakukan:
Kemudian gunakan saja sebagai TextWatcher biasa:
sumber
Saya mengirim 2 hari untuk menemukan solusi dan saya menemukan solusi yang berfungsi :) (pada tombol lunak)
Setelah menambahkan textwatcher ke EditText Anda:
Saya harap ini juga berfungsi di perangkat android lain (samsung, LG, dll).
sumber
Solusi sederhana saya yang bekerja dengan sempurna. Anda harus menambahkan sebuah bendera. Potongan kode saya:
sumber
Contoh pembuatan EditText dengan TextWatcher
TextWatcher kustom
sumber
untuk seseorang yang menggunakan Kotlin
addOnTextChanged
tidak cukup fleksibel untuk menangani beberapa kasus (mis: mendeteksi jika pengguna menekan hapus ketika edit teks kosong)setOnkeyListener
bekerja bahkan keyboard lunak atau hardkeyboard! tetapi hanya di beberapa perangkat . Dalam kasus saya, ini berfungsi pada Samsung s8 tetapi tidak berfungsi pada Xiaomi mi8 se.jika Anda menggunakan kotlin, Anda dapat menggunakan fungsi crossline
doOnTextChanged
, itu samaaddOnTextChanged
tetapi callback dipicu bahkan teks edit kosong.CATATAN: doOnTextChanged adalah bagian dari pustaka Android KTX
sumber
doOnTextChanged
fungsi ekstensi dapat diakses di pustaka Android KTXEditText
? Thanks in advanceAda pertanyaan serupa di Stackoverflow. Anda perlu mengganti
EditText
untuk mendapatkan akses keInputConnection
objek yang berisideleteSurroundingText
metode. Ini akan membantu Anda mendeteksi peristiwa penghapusan (backspace). Tolong, lihat solusi yang saya berikan di sana Android - tidak dapat menangkap backspace / delete press dengan lembut. papan ketiksumber
Ini sepertinya berhasil untuk saya:
sumber
Saya juga menghadapi masalah yang sama dalam Dialog .. karena saya menggunakan setOnKeyListener .. Tapi saya menyetel default return true. Setelah diubah seperti kode di bawah ini, itu berfungsi dengan baik untuk saya ..
sumber
Berdasarkan @Jiff di
ZanyEditText
siniWiseEditText
dengansetSoftKeyListener(OnKeyListener)
sumber
Masalah saya adalah, bahwa saya harus kustom
Textwatcher
, jadi saya tidak ingin menambahkanOnKeyListener
keEditText
serta saya tidak ingin membuat kustomEditText
. Saya ingin mendeteksi jika backspace ditekan dalamafterTextChanged
metode saya , jadi saya tidak boleh memicu acara saya.Beginilah cara saya menyelesaikan ini. Semoga bisa membantu seseorang.
sumber
Saya telah menguji solusi @ Jeff pada versi 4.2, 4.4, 6.0. Pada 4.2 dan 6.0, ini bekerja dengan baik. Tetapi pada 4.4, itu tidak berhasil.
Saya menemukan cara mudah untuk mengatasi masalah ini. Poin kuncinya adalah memasukkan karakter yang tidak terlihat ke dalam konten EditText di awal, dan jangan biarkan pengguna menggerakkan kursor sebelum karakter ini. Cara saya adalah memasukkan karakter spasi putih dengan ImageSpan Lebar Nol di atasnya. Ini kode saya.
Dan kita perlu menyesuaikan EditText yang memiliki SelectionChangeListener
}
Dan langkah terakhir
Dan sekarang, kita selesai ~ Kita dapat mendeteksi peristiwa kunci backspace ketika EditText tidak memiliki konten aktual, dan pengguna tidak akan tahu apa-apa tentang trik kita.
sumber
Pertanyaan ini mungkin sudah lama tetapi jawabannya sangat sederhana menggunakan TextWatcher.
sumber
Saya telah menemukan solusi yang sangat sederhana yang bekerja dengan keyboard lunak.
sumber
Anda bisa menyetel key listener pada aktivitas tersebut, dan dalam metode callback, Anda bisa mendeteksi kunci mana yang ditekan pengguna. Kode di bawah ini untuk referensi Anda. Semoga membantu.
sumber