Dalam aplikasi saya, saya memiliki EditText bahwa pengguna hanya memiliki akses Baca bukan akses Tulis.
Dalam kode saya atur android:enabled="false"
.
Meskipun latar belakang EditText berubah menjadi gelap, ketika saya mengkliknya keyboard muncul dan saya dapat mengubah teks.
Apa yang harus saya atur untuk menonaktifkan EditText?
android
android-edittext
Hesam
sumber
sumber
EditText
dan menjaga properti ini, gunakan sajaUI.setReadOnly(myEditText, true)
dari perpustakaan ini . Jika Anda ingin mereplikasi perilaku ini tanpa pustaka, periksa kode sumber untuk metode kecil ini.Jawaban:
Saya percaya yang benar adalah mengatur
android:editable="false"
.Dan jika Anda bertanya-tanya mengapa tautan saya mengarah ke atribut
TextView
, Anda jawabannya adalah karenaEditText
mewarisi dariTextView
:Pembaruan:
Seperti disebutkan dalam komentar di bawah,
editable
sudah usang ( karena API level 3 ). Anda seharusnya menggunakaninputType
(dengan nilainone
).sumber
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
bekerja sangat baik untuk saya (lupakan tentang usang, saya pikir android: dapat diedit tidak ada hubungannya dengan android: inputType)gunakan
EditText.setFocusable(false)
untuk menonaktifkan pengeditanEditText.setFocusableInTouchMode(true)
untuk mengaktifkan pengeditan;sumber
editText.setEnabled(false);
akan mengubah warna teks menjadi abu-abu. Namun, pemintal tidak mengubah warna teks saat menggunakansetEnabled
, menjadikannya pengalaman yang tidak konsisten.setFocusable(true)
? lihat tautan ini untuk perbedaan antarasetFocusable()
dansetFocusableInTouchMode()
: stackoverflow.com/questions/23799064/…Anda dapat mencoba metode berikut:
Diedit EditText:
Teks Edit yang Dinonaktifkan:
Ini bekerja untuk saya dan saya harap ini membantu Anda.
sumber
editText.setFocusableInTouchMode(true)
alih-aliheditText.setFocusable(true)
.Gunakan ini untuk menonaktifkan input pengguna
android: editable = "false" Metode ini sudah usang.
sumber
Untuk menonaktifkan edit
EditText
, saya pikir kita bisa menggunakanfocusable
ATAUenable
tetapiMenggunakan
android:enabled=...
ataueditText.setEnabled(...)
Ini juga mengubah warna teks
EditText
menjadi abu-abu.Ketika diklik itu tidak berpengaruh
Menggunakan
android:focusable=...
ataueditText.setFocusable(false)
-editText.setFocusableInTouchMode(true)
Itu tidak mengubah warna teks
EditText
Ketika diklik itu menyoroti
EditText
garis bawah selama sekitar beberapa milidetikKeluaran
sumber
Seperti
android:editable="false"
yang didepartasi. Anda dapat menggunakan InputType TYPE_NULL pada EditTextgunakan seperti ini:
sumber
Seperti yang
android:editable="false"
sudah usang dixml
Jika ingin,
java class
Anda juga dapat menggunakan ini secara terprogramsumber
Secara sederhana:
sumber
Setel properti di bawah ini di kelas:
Ini akan bekerja dengan lancar sesuai kebutuhan Anda.
sumber
enabled
cukupUntuk menonaktifkan fungsionalitas EditText, cukup gunakan:
jika Anda ingin mengaktifkannya, maka Anda dapat menggunakan:
sumber
jika Anda menggunakan
android:editable="false"
, eclipse akan mengingatkan Anda pesan ini "android: diedit sudah usang: Gunakan inputType sebagai gantinya".Jadi, saya gunakan
android:focusable="false"
sebagai gantinya, itu bekerja dengan baik untuk saya.sumber
sekarang tidak digunakan lagi dan digunakan
sumber
TYPE_TEXT_VARIATION_PASSWORD
Ikuti ini untuk lebih lanjut developer.android.com/reference/android/text/InputTypeGunakan
TextView
sebagai gantinya.sumber
Nonaktifkan = FOKUS + KLIK + CURSOR
Menonaktifkan fokus, klik, dan visibilitas kursor berguna untuk saya.
sumber
Ini akan membuat edittext Anda dinonaktifkan .
Dan dengan menggunakan ini
Hanya akan membuat Edittext Anda tidak menunjukkan papan tombol Anda, tetapi jika terhubung ke keyboard fisik, itu akan membuat Anda mengetik.
sumber
Saya menggunakan Pustaka Desain Bahan google yang baru dirilis. Dalam kasus saya, ini berfungsi ketika saya menggunakan android: focusable = "false" dan android: cursorVisible = "false"
sumber
Dalam kasus saya, saya perlu saya
EditText
untuk menggulir teks jika tidak. dari garis melebihimaxLines
ketika dinonaktifkan. Implementasi ini bekerja dengan baik untuk saya.sumber
Coba yang ini, bekerja dengan baik untuk saya:
Catatan: Anda harus menambahkan
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
aktivitas Anda atau yang lainkeyboard
akan muncul saat pertama kali.sumber
Seperti beberapa jawaban menyebutkannya, jika Anda menonaktifkan editText, ia menjadi abu-abu dan jika Anda mengatur false fokus, kursor ditampilkan.
Jika Anda ingin melakukannya hanya dengan xml, ini berhasil
Saya cukup menambahkan FrameLayout yang muncul di atas editText dan mengaturnya fokus dan dapat diklik sehingga editText tidak dapat diklik.
sumber
Ini bekerja untuk saya:
android: focusable = "false"
sumber
Dari komentar @ Asymptote pada jawaban yang diterima, gunakan:
... dan Bob adalah pamanmu.
sumber
Hari ini saya masih menggunakan
editable="false"
, tetapi juga denganfocusable="false"
.Saya pikir kasus kita perlu membuat EditText tidak dapat diedit, adalah karena kita ingin mempertahankan gaya EditText-nya (dengan garis bawahi itu, dengan petunjuk, dll), tetapi ia menerima input lain alih-alih teks. Misalnya daftar dropdown.
Dalam hal penggunaan seperti itu, kita perlu memiliki yang
EditText
dapat diklik (sehinggaenabled="false"
tidak cocok). Pengaturanfocusable="false"
melakukan trik ini, namun, saya masih bisa menahan EditText dan menempelkan teks saya sendiri ke dalamnya dari clipboard . Bergantung pada kode dan penanganan Anda, ini bahkan dapat membuat aplikasi Anda mogok.Jadi saya juga menggunakan
editable="false"
dan sekarang semuanya bagus, kecuali peringatan.sumber
Anda dapat menggunakan
android:focusable="false"
tetapi juga harus menonaktifkan kursor jika fungsi copy / paste masih akan berfungsi.jadi, gunakan
sumber
Ada beberapa cara bagaimana mencapai beberapa tingkat cacat.
editText.setShowSoftInputOnFocus(false);
daneditText.setFocusable
mencegah
EditText
keyboard tidak menampilkan - menulis dalam beberapa teks. Tetapi kursor masih terlihat dan pengguna dapat menempel di beberapa teks.editText.setCursorVisible(false)
menyembunyikan kursor. Tidak yakin mengapa Anda ingin melakukan itu. Pengguna dapat memasukkan teks & rekat.
editText.setKeyListener(null)
Saya menemukan cara ini paling nyaman. Tidak ada cara bagaimana pengguna dapat memasukkan teks, tetapi widget masih berfungsi
OnClickListener
jika Anda ingin memicu tindakan ketika pengguna menyentuhnyaeditText.setEnabled(false);
sepenuhnya menonaktifkan
EditText
. Secara harfiah 'hanya-baca', pengguna tidak dapat memasukkan teks apa pun di dalamnya dan (misalnya)OnClickListener
tidak bekerja dengannya.Dokumentasi TextEdit
sumber
Set ini dalam kode XML Anda, Ini berfungsi.
android: focusableInTouchMode = "false"
sumber