Comment faire pour désactiver le copier/coller depuis/vers EditText
Dans ma demande, il y a un écran d'enregistrement, où je ne veux pas que l'utilisateur soit en mesure de copier/coller le texte dans la EditText
champ. J'ai mis un onLongClickListener
sur chaque EditText
de sorte que le menu contextuel montrant copier/coller/inputmethod et d'autres options ne s'affichent pas. Si l'utilisateur ne sera pas en mesure de copier/coller dans le champs de saisie.
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;
}
};
Mais le problème se pose de savoir si l'utilisateur a activé un clavier tiers autres que l'Android par défaut, ce qui peut avoir un bouton pour copier/coller ou qui peut afficher le même menu contextuel. Alors, comment puis-je désactiver le copier/coller dans ce scénario ?
S'il vous plaît laissez-moi savoir si il ya d'autres façons de le copier/coller en tant que bien. (et, éventuellement, comment les désactiver)
Toute aide serait appréciée.
- Si le "coller" l'opération vient d'un IME, alors vous n'avez pas de moyen standard de la distinguer de la normale frappes. Une idée à faire est d'essayer de mesurer le temps écoulé entre chaque personnage arrivée et si le temps est trop court, puis les personnages sont à venir à partir d'un "coller" de l'opération.
- semble être sale soloution! en valeur un regard bien que.
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez l'API de niveau 11 ou au-dessus, alors vous pouvez arrêter de copier,coller,couper et personnalisé les menus contextuels d'apparaître en.
Retour faux de onCreateActionMode(ActionMode, Menu) permettra d'éviter le mode d'action de démarrer(Tout Sélectionner, Couper, Copier et Coller des actions).
Meilleure méthode est d'utiliser:
android:longClickable="false"
🙂Vous pouvez le faire en désactivant le long de presse de l'EditText
Pour la mettre en œuvre, il suffit d'ajouter la ligne suivante dans le fichier xml -
Je suis en mesure de désactiver le copier-coller avec les éléments suivants:
Espère que cela fonctionne pour vous 😉
ici est une meilleure façon de désactiver couper copier coller d'un editText de travail dans toutes les version
En plus de la setCustomSelectionActionModeCallback, et désactivé long-cliquez sur solutions, il est nécessaire de prévenir les COLLER/REMPLACER les menus d'apparaître lorsque le texte poignée de sélection est cliqué, comme dans l'image ci-dessous:
La solution réside dans la prévention de la COLLER/REMPLACER le menu qui s'affiche dans la
show()
méthode de la (non documenté)android.widget.Editor
classe. Avant que le menu s'affiche, une vérification est effectuée pourif (!canPaste && !canSuggest) return;
. Les deux méthodes sont utilisées comme base pour définir ces variables sont à la fois dans leEditText
classe:isSuggestionsEnabled()
est public, et peut donc être remplacée.canPaste()
n'est pas, et doit donc être caché par l'introduction d'une fonction du même nom dans la classe dérivée.Une réponse plus complète est disponible ici.
À l'aide d'autres solutions, l'API 26 (Oreo) était curseur à manipuler par une seule pression sur le texte saisi, puis menu peut être affiché. Seule une combinaison de solutions peut résoudre mon problème.
Kotlin solution:
Alors vous pouvez simplement appeler cette méthode sur votre
TextView
:Si vous n'avez pas wan pas à désactiver le clic long, parce que vous avez besoin pour effectuer certaines des fonctionnalités de long sur plus de retourner la valeur true est une meilleure option pour le faire.
Votre edittext clic long sera comme ceci.
Comme par la documentation
Renvoie "True" indique que le clic long ont été manipulés, donc pas besoin d'effectuer défaut opérations.
J'ai testé cela sur l'API de niveau 16, 22 et 25. Sa fonctionne très bien pour moi. Espérons que cela aidera.
android:longClickable="false"
en XMLhttps://github.com/neopixl/PixlUI fournit une
EditText
avec une méthodemyEditText.disableCopyAndPaste()
.Et les travaux sur l'ancienne API
Voici un hack pour désactiver l'option "coller" popup. Vous devez remplacer les
EditText
méthode:Similaire peut être fait pour les autres actions.
Lire le presse-papiers, vérifiez contre l'entrée et le moment où l'entrée est "tapé". Si le presse-papiers a le même texte et c'est trop rapide, supprimer l'collé d'entrée.
@Zain Ali, votre réponse API travaille sur 11. Je voulais juste suggérer une façon de le faire sur l'API de 10 ainsi. Depuis que j'ai eu pour maintenir mon projet API sur cette version, j'ai été constamment jouer avec les fonctions disponibles dans 2.3.3 et a obtenu une possibilité de le faire. J'ai partager le fragment de code ci-dessous. J'ai testé le code et il a travaillé pour moi. Je n'ai de cet extrait sur une urgence. N'hésitez pas à améliorer le code, si il y a des modifications qui peuvent être faites..
la solution est très simple
--------> preview <---------
Essayez de suivre custome classe pour prevant copier et coller dans
Edittext
}
Pour smartphone avec le presse-papiers, il est possible de prévenir ce genre.
Similaire à GnrlKnowledge, vous pouvez effacer le presse-papiers
http://developer.android.com/reference/android/text/ClipboardManager.html
Si vous le souhaitez, conserver le texte dans le presse-papiers, et sur onDestroy, vous pouvez le régler de nouveau.
J'ai constaté que lorsque vous créez un filtre d'entrée pour éviter l'entrée de caractères indésirables, collage de ces personnages dans l'édition de texte est sans effet. Donc, ce genre d'résout mon problème.
Vous pouvez essayer android:focusableInTouchMode="false".
Solution qui a fonctionné pour moi a été de créer des Edittext et remplacer méthode suivante:
}
Essayez d'utiliser.