Saya bertanya-tanya apakah ada cara untuk menangani pengguna menekan Entersaat mengetik EditText
, sesuatu seperti acara HTML onSubmit.
Juga bertanya-tanya apakah ada cara untuk memanipulasi keyboard virtual sedemikian rupa sehingga tombol "Selesai" diberi label sesuatu yang lain (misalnya "Pergi") dan melakukan tindakan tertentu ketika diklik (lagi, seperti onSubmit).
Jawaban:
Iya.
Juga ya.
Anda akan ingin melihat atribut
android:imeActionId
danandroid:imeOptions
, ditambahsetOnEditorActionListener()
metode, semua aktifTextView
.Untuk mengubah teks tombol "Selesai" menjadi string khusus, gunakan:
sumber
sumber
enter
di teks edit saya, seluruh teks edit bergerak ke bawah ... Bagaimana saya bisa memperbaikinya?Inilah yang Anda lakukan. Itu juga tersembunyi di kode sampel Pengembang Android 'Bluetooth Chat'. Ganti bagian tebal yang mengatakan "contoh" dengan variabel dan metode Anda sendiri.
Pertama, impor apa yang Anda butuhkan ke dalam Kegiatan utama di mana Anda ingin tombol kembali untuk melakukan sesuatu yang istimewa:
Sekarang, buat variabel bertipe TextView.OnEditorActionListener untuk kunci pengembalian Anda (di sini saya menggunakan exampleListener );
Maka Anda perlu memberi tahu pendengar dua hal tentang apa yang harus dilakukan ketika tombol kembali ditekan. Perlu tahu apa yang sedang kita bicarakan EditText (di sini saya menggunakan exampleView ), dan kemudian perlu tahu apa yang harus dilakukan ketika tombol Enter ditekan (di sini, example_confirm () ). Jika ini adalah EditText terakhir atau satu-satunya dalam Aktivitas Anda, itu harus melakukan hal yang sama seperti metode onClick untuk tombol Kirim (atau OK, Konfirmasi, Kirim, Simpan, dll).
Terakhir, atur pendengar (kemungkinan besar dalam metode onCreate Anda);
sumber
KeyEvent.ACTION_UP
. Agar ini bekerja, Anda harus terlebih dahulu mengkonsumsiACTION_DOWN
acara:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Kemudian Anda dapat memeriksaACTION_UP
acara dan melakukan tindakan (mirip dengan jawaban di atas). Jika Anda tidak mengkonsumsiACTION_DOWN
acara tersebut, makaonEditorAction
tidak akan dipanggilACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- tidak dapat melakukan pendekatan lain untuk bekerjaKeyboard perangkat keras selalu menghasilkan acara yang dimasukkan, tetapi keyboard perangkat lunak mengembalikan actionID dan null yang berbeda di singleLine EditTexts. Kode ini merespons setiap kali pengguna menekan masuk dalam EditText bahwa pendengar ini telah diatur, terlepas dari EditText atau jenis keyboard.
Tampilan default tombol enter di singleLine = false memberikan tanda panah masuk bengkok. Ketika singleLine = true di EditText terakhir kuncinya mengatakan DONE, dan pada EditTexts sebelum itu tertulis NEXT. Secara default, perilaku ini konsisten di semua emulator vanilla, android, dan google. Atribut scrollHorizontal tidak ada bedanya. Tes nol penting karena respons ponsel terhadap soft enters diserahkan kepada pabrikan dan bahkan di emulator, emulator vanilla Level 16 merespons soft soft lama dalam multi-line dan scroll. acara.
sumber
Halaman ini menjelaskan dengan tepat bagaimana melakukan ini.
https://developer.android.com/training/keyboard-input/style.html
Atur android: imeOptions maka Anda cukup memeriksa actionId di onEditorAction. Jadi jika Anda mengatur imeOptions ke 'actionDone' maka Anda akan memeriksa 'actionId == EditorInfo.IME_ACTION_DONE' di onEditorAction. Juga, pastikan untuk mengatur android: inputType.
Berikut EditText dari contoh yang ditautkan di atas:
Anda juga dapat mengatur ini secara terprogram menggunakan fungsi setImeOptions (int) . Inilah OnEditorActionListener dari contoh yang ditautkan di atas:
sumber
Saya tahu ini berumur satu tahun, tetapi saya baru menemukan ini berfungsi dengan baik untuk EditText.
Ini mencegah apa pun selain teks dan ruang. Saya tidak bisa meng-tab, "return" ("\ n"), atau apa pun.
sumber
Sama seperti tambahan untuk respons Chad (yang bekerja hampir sempurna untuk saya), saya menemukan bahwa saya perlu menambahkan tanda centang pada jenis tindakan KeyEvent untuk mencegah kode saya dieksekusi dua kali (sekali pada kunci-atas dan sekali pada kunci-bawah) peristiwa).
Lihat http://developer.android.com/reference/android/view/KeyEvent.html untuk info tentang pengulangan acara tindakan (menahan tombol enter) dll.
sumber
Saya memiliki tujuan yang sama. Saya ingin menyelesaikan menekan tombol "Enter" pada keyboard (yang ingin saya sesuaikan) di AutoCompleteTextView yang memperluas TextView. Saya mencoba berbagai solusi dari atas dan sepertinya berhasil. TETAPI saya mengalami beberapa masalah ketika saya mengganti tipe input pada perangkat saya (Nexus 4 dengan AOKP ROM) dari SwiftKey 3 (yang berfungsi dengan sempurna) ke keyboard Android standar (di mana alih-alih menangani kode saya dari pendengar, baris baru adalah dimasukkan setelah menekan tombol "Enter". Butuh beberapa saat untuk menangani masalah ini, tetapi saya tidak tahu apakah itu akan berfungsi dalam semua keadaan apa pun jenis input yang Anda gunakan.
Jadi, inilah solusi saya:
Setel atribut tipe input dari TextView di xml ke "teks":
Kustomisasi label tombol "Enter" pada keyboard:
Setel OnEditorActionListener ke TextView:
Saya harap ini dapat membantu orang lain untuk menghindari masalah yang saya alami, karena mereka hampir membuat saya gila.
sumber
Di xml Anda, tambahkan atribut imeOptions ke editText
Kemudian, dalam kode Java Anda, tambahkan OnEditorActionListener ke EditText yang sama
Berikut ini penjelasannya - ImeOptions = actionDone akan menetapkan "actionDone" ke EnterKey. EnterKey di keyboard akan berubah dari "Enter" ke "Done". Jadi ketika Enter Key ditekan, itu akan memicu tindakan ini dan dengan demikian Anda akan menanganinya.
sumber
Anda juga bisa melakukannya ..
sumber
enter
di teks edit saya, seluruh teks edit bergerak ke bawah ... Bagaimana saya bisa memperbaikinya?Bekerja sangat baik untuk saya.
Selain itu sembunyikan keyboard
sumber
Pertama, Anda harus mengatur EditText mendengarkan tekan tombol
Kedua, tentukan acara dengan menekan tombol, misalnya, acara untuk mengatur teks TextView:
Dan akhirnya, jangan lupa untuk mengimpor EditText, TextView, OnKeyListener, KeyEvent di atas:
sumber
bekerja dengan sempurna
}
bekerja dengan sempurna
sumber
Xml
sumber
Ini seharusnya bekerja
sumber
Ketikkan kode ini di editor Anda sehingga dapat mengimpor modul yang diperlukan.
sumber
Ini berfungsi dengan baik pada ponsel Android LG. Ini mencegah
ENTER
dan karakter khusus lainnya ditafsirkan sebagai karakter normal.Next
atauDone
tombol muncul secara otomatis danENTER
berfungsi seperti yang diharapkan.sumber
Berikut adalah fungsi statis sederhana yang dapat Anda lemparkan ke dalam
Utils
atauKeyboards
kelas Anda yang akan mengeksekusi kode ketika pengguna menekan tombol kembali pada keyboard perangkat keras atau perangkat lunak. Ini adalah versi modifikasi dari jawaban luar biasa @ earlcaspersumber
InputType pada bidang teks harus
text
sesuai dengan apa yang dikatakan CommonsWare berfungsi. Baru saja mencoba semua ini, tidak ada inputType sebelum persidangan dan tidak ada yang berhasil, Enter terus mendaftar sebagai soft enter. SetelahinputType = text
, semuanya termasuk setImeLabel berfungsi.Contoh:
android:inputType="text"
sumber
sumber
Cara yang dapat diandalkan untuk merespons <enter> dalam EditText adalah dengan TextWatcher , LocalBroadcastManager , dan BroadcastReceiver . Anda perlu menambahkan perpustakaan dukungan v4 untuk menggunakan LocalBroadcastManager. Saya menggunakan tutorial di vogella.com : 7.3 "Acara siaran lokal dengan LocalBroadcastManager" karena contoh kode ringkas lengkapnya. Dalam onTextChanged before adalah indeks akhir dari perubahan sebelum perubahan >; minus mulai. Ketika di TextWatcher utas UI sedang sibuk memperbarui editTeks yang dapat diedit, jadi kami mengirim Intent untuk membangunkan BroadcastReceiver ketika utas UI selesai memperbarui editText.
sumber
android:inputType="textCapSentences"
) Maka carriage-return disaring keluar dari input sehingga onTextChanged () tidak dipanggil ketika pengguna menekan tombol Enter.Pertanyaan ini belum dijawab dengan Butterknife
LAYOUT XML
APP JAWA
sumber
Menggunakan Kotlin, saya telah membuat fungsi yang menangani semua jenis tindakan "selesai" seperti untuk EditText, termasuk keyboard, dan dimungkinkan untuk memodifikasinya dan juga menangani tombol lain sesuai keinginan:
Jadi, penggunaan sampel:
Adapun untuk mengubah label, saya pikir itu tergantung pada aplikasi keyboard, dan biasanya hanya berubah pada landscape, seperti yang tertulis di sini . Bagaimanapun, contoh penggunaan untuk ini:
Atau, jika Anda ingin dalam XML:
Dan hasilnya (ditampilkan dalam lanskap):
sumber
Tambahkan dependen ini, dan itu harus bekerja:
sumber
Ini akan memberi Anda fungsi yang bisa dipanggil saat pengguna menekan tombol kembali.
Pemakaian
sumber