Saya ingin membuat tampilan hanya-baca EditText
. XML untuk melakukan kode ini sepertinya android:editable="false"
, tetapi saya ingin melakukan ini dalam kode.
Bagaimana saya bisa melakukan ini?
android
android-edittext
warna
sumber
sumber
android:editable
sudah usangEditText
.UI.setReadOnly(myEditText, true)
dari pustaka ini . Ada beberapa properti yang harus disetel, yang dapat Anda periksa di kode sumber .android:inputType="none"
danandroid:textIsSelectable="true"
Jawaban:
Silakan gunakan kode ini ..
sumber
Jika Anda
setEnabled(false)
maka AndaeditText
akan terlihat cacat (abu-abu, dll). Anda mungkin tidak ingin mengubah aspek visual editor Anda.Cara yang tidak terlalu mengganggu adalah dengan menggunakan
setFocusable(false)
.Saya percaya bahwa ini menjawab pertanyaan Anda lebih dekat dengan maksud awal Anda.
sumber
setFocusable(false)
(dan bahkansetFocusableInTouchMode(false)
dengansetClickable(false)
) Anda masih dapat mengubah nilai AndaeditText
menekan AndaeditText
selama beberapa ratus milidetik dan memilihPaste
opsi kecuali clipboard sistem kosong. Saya mengujinya dengan API terbaru yang tersedia yaitu 23 .Sedang
XML
digunakan:Sebagai contoh:
sumber
editable
atribut tersebut tampaknya tidak digunakan lagi (setidaknya, tidak pada API level 23).android:inputType="none"
android:inputType="none"
dan datanya masih dapat diedit.Ini bekerja untuk saya:
sumber
Yang terbaik adalah dengan menggunakan
TextView
.sumber
Sesuai dokumen, ini mencegah soft keyboard ditampilkan. Ini juga mencegah menempel, memungkinkan pengguliran, dan tidak mengubah aspek visual tampilan. Namun, ini juga mencegah pemilihan dan penyalinan teks dalam tampilan.
Dari pengaturan pengujian saya
setInputType
hinggaTYPE_NULL
tampaknya secara fungsional setara dengan yang disusutkanandroid:editable="false"
. Selain itu,android:inputType="none"
tampaknya tidak memiliki efek yang terlihat.sumber
android:inputType="none"
tidak berfungsi lagi.android: editable = "false" sudah tidak digunakan lagi. Oleh karena itu, Anda tidak dapat menggunakannya untuk membuat teks edit hanya-baca.
Saya telah melakukan ini menggunakan solusi di bawah ini. Di sini saya telah menggunakan
android: inputType = "none"
android: textIsSelectable = "true"
android: focusable = "false"
Cobalah :)
sumber
android:enabled="false"
mungkin alternatif yang bagus.Ini akan memberi Anda filter EditText yang tidak dapat diedit. Anda harus terlebih dahulu meletakkan teks yang Anda inginkan di bidang editText dan kemudian menerapkan filter ini.
sumber
return dst.subSequence(dstart, dend);
menulis dua baris ini lebih dari cukup untuk pekerjaan Anda.
sumber
diatur dalam XML
sumber
Coba gunakan
sumber
Jika disetel, tentukan bahwa ini
TextView
memiliki metode masukan. Ini akan menjadi teks kecuali telah ditentukan lain. KarenaTextView
, ini salah secara default. SebabEditText
, memang benar secara default.Harus berupa
boolean
nilai,true
ataufalse
.Ini juga bisa menjadi referensi ke sumber daya (dalam bentuk
@[package:]type:name
) atau atribut tema (dalam formulir?[package:][type:]name
) yang berisi nilai jenis ini.Ini sesuai dengan simbol sumber daya atribut global yang dapat diedit.
Metode Terkait
sumber
Coba ganti listener onLongClick dari teks edit untuk menghapus menu konteks:
sumber
Gunakan kode ini:
Penonaktifan
editText
memberikan tampilan dan perilaku hanya-baca tetapi juga mengubahtext-color
menjadi abu-abu sehingga diperlukan pengaturan warna teksnya.sumber
ini adalah implementasi saya (agak panjang, tapi berguna bagi saya!): Dengan kode ini Anda dapat membuat EditView Read-only atau Normal. bahkan dalam keadaan read-only, teks dapat disalin oleh pengguna. Anda dapat mengubah latar belakang agar terlihat berbeda dari EditText biasa.
manfaat dari kode ini adalah, EditText ditampilkan sebagai EditText normal tetapi isinya tidak dapat diubah. Nilai yang dikembalikan harus disimpan sebagai variabel agar seseorang dapat kembali dari status hanya-baca ke normal.
untuk membuat EditText hanya-baca, cukup taruh sebagai:
dan untuk membuatnya normal gunakan tw dari pernyataan sebelumnya:
sumber
Ini berhasil untuk saya, dengan mempertimbangkan beberapa saran di atas. Membuat TextEdit dapat difokuskan, tetapi jika pengguna mengklik atau memfokuskan, kami menampilkan daftar pilihan di PopupWindow. (Kami mengganti widget Spinner yang aneh). TextEdit xml sangat umum ...
sumber
Jika Anda hanya ingin dapat menyalin teks dari kontrol tetapi tidak dapat mengedit itu Anda mungkin ingin menggunakan TextView bukan dan set teks adalah dipilih .
kode:
xml:
Dokumentasi setTextIsSelectable mengatakan:
Namun saya harus secara eksplisit mengatur focusable dan focusableInTouchMode ke true untuk membuatnya bekerja dengan input sentuh.
sumber
Ini adalah satu-satunya solusi sederhana penuh bagi saya.
sumber
Saya tidak mengalami masalah dalam membuat EditTextPreference hanya-baca, dengan menggunakan:
Ini berfungsi dengan baik bila digabungkan dengan menggunakan bidang 'ringkasan' untuk menampilkan bidang hanya-baca (berguna untuk menampilkan info akun, misalnya). Memperbarui bidang ringkasan yang diambil secara dinamis dari http://gmariotti.blogspot.com/2013/01/preferenceactivity-preferencefragment.html
sumber
Setel ini dalam file xml EdiTextView
sumber
Seperti yang
android:editable=""
sudah tidak berlaku lagi,Setting
android:clickable="false"
android:focusable="false"
android:inputType="none"
android:cursorVisible="false"
akan membuatnya menjadi "hanya-baca".
Namun, pengguna masih dapat menempel ke bidang atau melakukan tindakan klik panjang lainnya. Untuk menonaktifkan ini, cukup ganti onLongClickListener ().
Di Kotlin:
myEditText.setOnLongClickListener { true }
sudah cukup.
sumber
Pendekatan saya untuk ini telah membuat kelas TextWatcher kustom sebagai berikut:
Kemudian Anda cukup menambahkan pengamat itu ke bidang mana pun yang ingin Anda baca hanya meskipun diaktifkan:
sumber