Apakah mungkin memiliki EditText
widget dengan android:inputType="textMultiLine"
set, dan android:imeOptions="actionDone"
pada saat yang sama?
Saya ingin kotak edit multi-baris, dengan tombol tindakan di keyboard menjadi Selesai, bukan Enter (Carriage Return), tetapi sepertinya tidak berfungsi ..
Terima kasih sebelumnya
Jawaban:
Menggunakan
dan dalam XML:
sumber
textField.setCursorVisible(false);
di dalamonEditorActionListener
Dari dokumentasi android: ' "textMultiLine" Keyboard teks normal yang memungkinkan pengguna memasukkan string teks panjang yang menyertakan jeda baris (carriage return) . 'Oleh karena itu, atribut textMultiLine tidak sesuai jika Anda ingin memiliki tombol' Selesai 'di keyboard.
Cara sederhana untuk mendapatkan bidang masukan multi-baris (dalam hal ini 3 baris) dengan tombol selesai adalah menggunakan EditText dengan
Namun, untuk beberapa alasan ini hanya berfungsi untuk saya jika saya melakukan pengaturan ini dalam kode dan bukan file tata letak (di onCreate) oleh
Saya harap ini membantu seseorang, karena butuh waktu cukup lama untuk mengetahuinya. Jika Anda menemukan cara untuk membuatnya bekerja dari manifes, beri tahu kami.
sumber
maxLines()
daripadasetLines()
jika Anda ingin menghindari mengubah ketinggianEditText
setMaxLines(3)
) Terima kasih banyak!Contoh Kerja! Buat kelas EditText kustom di bawah ini yang mendukung fitur ini dan gunakan kelas tersebut dalam file xml. Kode kerja:
sumber
Untuk melakukan ini di Kotlin (dan juga secara opsional menerapkan konfigurasi lain seperti
textCapSentences
Anda dapat menggunakan fungsi ekstensi ini:Pemakaian:
sumber
setRawInputType
bukannyasetInputType
Saya pikir ini adalah cara untuk melakukan sesuatu. Memiliki
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
membuat fungsi kunci enter menjadi ambigu. Hanya perlu diingat bahwa Anda dapat menggunakanandroid:lines="10"
dan mungkin menghapusandroid:inputType="textMultiLine"
, tetapi tergantung pada apa yang ingin Anda capai terkadang Anda hanya perluandroid:inputType="textMultiLine"
dan tidak ada penggantinya.sumber
Ini tampaknya bekerja untuk saya dengan sempurna
sumber
Solusi Kotlin yang Dapat Digunakan Kembali
Menetapkan nilai-nilai ini dalam kode adalah satu-satunya hal yang berhasil bagi saya
Saya sering membutuhkan ini, jadi buatlah ini untuk menjaga kode tetap bersih:
Jika Anda ingin menambahkan tindakan kustom opsional pada 'Selesai', coba ini:
Kemudian tambahkan
hideKeyboard()
panggilan masukEditText.multilineDone
sumber
Jawaban singkat: Tidak, saya yakin itu tidak mungkin dilakukan sebelum API level 11 (3.0).
Masalah yang sama muncul di sini (dibahas dalam komentar untuk jawaban yang diterima):
Tombol tindakan keyboard Soft Android
Dari komentar terakhir:
sumber
Cara sederhana untuk mengatasi situasi ini:
pertahankan atribut ini di EditText:
lalu tambahkan kode ini untuk hanya menyembunyikan keyboard saat ENTER ditekan:
sumber
Jika ini bukan tentang tampilan keyboard di layar, Anda cukup meletakkan pendengar masukan di keyboard dan mengaktifkan status "selesai" jika pengguna memasukkan baris baru.
sumber
jika Anda menggunakan opsi input textImeMultiline dengan imeoptions flagnext dan actionnext Anda mendapatkan tombol berikutnya daripada cariage kembali
sumber
Meskipun tidak ada solusi lain yang berhasil untuk saya, berikut ini yang berhasil baik dan menyelamatkan saya berhari-hari untuk lebih googling, dengan beberapa tikungan saya sendiri tentunya. Sayangnya tidak ingat persisnya dari mana saya mendapatkan kodenya sehingga tidak dapat memberikan kredit yang layak diterimanya kepada penulis.
Dalam kode Java Anda:
sumber
Saya menggunakan 4.x dan mencoba memanggil setHorizontallyScrolling () (dengan atau tanpa setLine () atau setMaxLines ()), serta banyak konfigurasi XML yang berbeda untuk menampilkan tombol Selesai. Tak satu pun dari mereka berhasil. Intinya adalah jika EditText Anda multi-baris, Android akan selalu ingin menampilkan carriage return alih-alih tombol "Selesai", kecuali Anda melakukan peretasan seputar ini.
Solusi paling rumit yang saya temukan yang tidak melibatkan pemetaan ulang perilaku kembalinya kereta ada di sini: https://stackoverflow.com/a/12570003/3268329 . Solusi ini akan meniadakan keinginan tanpa henti Android untuk memaksa pengaturan bendera IME_FLAG_NO_ENTER_ACTION untuk tampilan multi-garis, yang menyebabkan tombol Selesai menghilang.
sumber
Saya berjuang juga selama beberapa waktu, tetapi akhirnya saya menemukan solusi!
Buat saja kelas EditText kustom seperti:
Kelas ini menghapus lineBreaks (\ n), membungkus teks seperti yang akan dilakukan textMultiline, DAN memungkinkan Anda untuk mengganti tombol Enter dengan ImeAction;).
Anda hanya perlu memanggilnya dalam XML Anda, bukan dalam kelas EditText klasik.
Untuk menjelaskan logikanya di sini:
sumber
Solusi yang berfungsi di sini, buat EditTextView kustom Anda (cukup perpanjang textview) dan timpa onInputConnection dengan sepotong kode yang akan Anda temukan dalam jawaban yang diterima di sini: EditText Multiline dengan Label Tindakan Selesai SoftInput di 2.3
sumber