Dalam aplikasi saya, ada layar pendaftaran, di mana saya tidak ingin pengguna dapat menyalin / menempelkan teks ke dalam EditText
bidang. Saya telah menetapkan onLongClickListener
masing-masing EditText
sehingga menu konteks menampilkan copy / paste / inputmethod dan opsi lainnya tidak muncul. Jadi pengguna tidak akan dapat menyalin / menempel ke bidang Edit.
OnLongClickListener mOnLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// prevent context menu from being popped up, so that user
// cannot copy/paste from/into any EditText fields.
return true;
}
};
Tetapi masalah muncul jika pengguna telah mengaktifkan keyboard pihak ketiga selain dari standar Android, yang mungkin memiliki tombol untuk menyalin / menempel atau yang mungkin menampilkan menu konteks yang sama. Jadi bagaimana cara menonaktifkan copy / paste dalam skenario itu?
Tolong beri tahu saya jika ada cara lain untuk menyalin / menempel juga. (dan mungkin cara menonaktifkannya)
Bantuan apa pun akan dihargai.
Jawaban:
Jika Anda menggunakan API level 11 atau lebih tinggi maka Anda dapat menghentikan penyalinan, tempel, potong dan menu konteks kustom agar tidak muncul.
Mengembalikan false dari onCreateActionMode (ActionMode, Menu) akan mencegah dimulainya mode aksi (Pilih Semua, Potong, Salin, dan tempel tindakan).
sumber
Metode terbaik adalah menggunakan:
sumber
android:longClickable="false"
:)Anda dapat melakukan ini dengan menonaktifkan pers panjang EditText
Untuk mengimplementasikannya, cukup tambahkan baris berikut di xml -
sumber
Saya dapat menonaktifkan fungsionalitas salin dan tempel dengan yang berikut:
Semoga berhasil untuk Anda ;-)
sumber
di sini adalah cara terbaik untuk menonaktifkan cut copy paste karya editText di semua versi
sumber
Selain setCustomSelectionActionModeCallback , dan solusi klik lama yang dinonaktifkan , perlu untuk mencegah menu PASTE / REPLACE muncul ketika pegangan pemilihan teks diklik, seperti gambar di bawah ini:
Solusinya terletak pada mencegah menu PASTE / REPLACE dari muncul dalam
show()
metode kelas (non-didokumentasikan)android.widget.Editor
. Sebelum menu muncul, pemeriksaan dilakukan untukif (!canPaste && !canSuggest) return;
. Dua metode yang digunakan sebagai dasar untuk mengatur variabel-variabel ini sama-sama ada diEditText
kelas:isSuggestionsEnabled()
bersifat publik , dan karenanya dapat diganti.canPaste()
tidak, dan karenanya harus disembunyikan dengan memperkenalkan fungsi dengan nama yang sama di kelas turunan.Jawaban yang lebih lengkap tersedia di sini .
sumber
Solusi Kotlin:
Maka Anda bisa memanggil metode ini di
TextView
:sumber
Type mismatch
kesalahan dengan uraianRequired:ActionMode.Callback! Found:
ini pada bagian iniobject: ActionMode.Callback
. Adakah yang tahu mengapa itu tidak berhasil?Menggunakan solusi lain, API 26 (Oreo) masih menunjukkan pegangan kursor dengan satu ketukan pada teks yang dimasukkan, dan kemudian menu dapat ditampilkan. Hanya kombinasi solusi yang dapat menyelesaikan masalah saya.
sumber
Jika Anda tidak ingin menonaktifkan klik panjang karena Anda perlu melakukan beberapa fungsionalitas pada klik panjang daripada mengembalikan true adalah pilihan yang lebih baik untuk melakukannya.
Klik panjang edittext Anda akan seperti ini.
Sesuai dokumentasi Mengembalikan "True" akan menunjukkan bahwa klik panjang telah ditangani sehingga tidak perlu melakukan operasi standar.
Saya menguji ini pada API level 16, 22 dan 25. Ini berfungsi dengan baik untuk saya. Semoga ini bisa membantu.
sumber
android:longClickable="false"
dalam XMLhttps://github.com/neopixl/PixlUI menyediakan
EditText
metodemyEditText.disableCopyAndPaste()
.Dan itu berfungsi pada API lama
sumber
Ini adalah hack untuk menonaktifkan popup "paste". Anda harus mengganti
EditText
metode:Serupa dapat dilakukan untuk tindakan lain.
sumber
Saya sudah menguji solusi ini dan ini berhasil
sumber
Baca Clipboard, periksa input dan waktu input "diketik". Jika Clipboard memiliki teks yang sama dan terlalu cepat, hapus input yang ditempel.
sumber
@ Zain Ali, jawaban Anda berfungsi di API 11. Saya hanya ingin menyarankan cara untuk melakukannya di API 10 juga. Karena saya harus mempertahankan API proyek saya pada versi itu, saya terus-menerus bermain dengan fungsi yang tersedia di 2.3.3 dan mendapat kemungkinan untuk melakukannya. Saya telah membagikan cuplikan di bawah ini. Saya menguji kode dan ternyata berhasil untuk saya. Saya membuat potongan ini atas urgensi. Jangan ragu untuk memperbaiki kode jika ada perubahan yang dapat dilakukan ..
sumber
solusinya sangat sederhana
--------> pratinjau <---------
sumber
Coba ikuti kelas custome untuk mendapatkan copy dan paste
Edittext
}
sumber
Untuk smartphone dengan clipboard, dimungkinkan cegah seperti ini.
sumber
Mirip dengan GnrlKnowledge, Anda dapat menghapus Clipboard
http://developer.android.com/reference/android/text/ClipboardManager.html
Jika Anda mau, simpan teks di Clipboard, dan di onDestroy, Anda bisa mengaturnya lagi.
sumber
Saya menemukan bahwa ketika Anda membuat filter input untuk menghindari masuknya karakter yang tidak diinginkan, menempelkan karakter tersebut ke dalam teks edit tidak berpengaruh. Jadi ini semacam memecahkan masalah saya juga.
sumber
Anda dapat mencoba android: focusableInTouchMode = "false".
sumber
Solusi yang berhasil bagi saya adalah membuat Edittext khusus dan mengganti metode berikut:
}
sumber
Coba gunakan.
sumber
Siapa yang mencari solusi di Kotlin menggunakan kelas di bawah ini sebagai widget khusus dan menggunakannya dalam xml.
kelas SecureEditText: TextInputEditText {
}
sumber
saya menambahkan Fungsi Ekstensi dalam bahasa Kotlin :
Anda dapat menggunakannya seperti ini:
juga menambahkan baris di bawah ini di xml Anda:
sumber