Dans mon application, il y a un écran d'inscription, où je ne veux pas que l'utilisateur puisse copier / coller du texte dans le EditText
champ. J'ai défini un onLongClickListener
sur chacun EditText
pour que le menu contextuel montrant la méthode de copier / coller / d'entrée et d'autres options ne s'affiche pas. Ainsi, l'utilisateur ne pourra pas copier / coller dans les champs d'édition.
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 si l'utilisateur a activé un clavier tiers autre que le clavier par défaut d'Android, qui peut avoir un bouton à copier / coller ou qui peut afficher le même menu contextuel. Alors, comment désactiver le copier / coller dans ce scénario?
Veuillez me faire savoir s'il existe d'autres moyens de copier / coller également. (et éventuellement comment les désactiver)
Toute aide serait appréciée.
Réponses:
Si vous utilisez le niveau d'API 11 ou supérieur, vous pouvez empêcher les menus contextuels de copier, coller, couper et personnalisés d'apparaître par.
Renvoyer false depuis onCreateActionMode (ActionMode, Menu) empêchera le démarrage du mode action (actions Sélectionner tout, Couper, Copier et Coller).
la source
La meilleure méthode consiste à utiliser:
la source
android:longClickable="false"
:)Vous pouvez le faire en désactivant la pression longue sur EditText
Pour l'implémenter, ajoutez simplement la ligne suivante dans le xml -
la source
Je peux désactiver la fonctionnalité copier-coller avec les éléments suivants:
J'espère que ça marche pour toi ;-)
la source
voici un meilleur moyen de désactiver le copier-coller du travail d'édition de texte dans toutes les versions
la source
En plus de setCustomSelectionActionModeCallback et des solutions de clic long désactivées , il est nécessaire d' empêcher les menus PASTE / REPLACE d'apparaître lorsque vous cliquez sur la poignée de sélection de texte, comme illustré ci-dessous:
La solution consiste à empêcher le menu PASTE / REPLACE d'apparaître dans la
show()
méthode de laandroid.widget.Editor
classe (non documentée) . Avant que le menu n'apparaisse, une vérification est effectuéeif (!canPaste && !canSuggest) return;
. Les deux méthodes utilisées comme base pour définir ces variables sont toutes deux dans laEditText
classe:isSuggestionsEnabled()
est public et peut donc être remplacé.canPaste()
n'est pas, et doit donc être masquée en introduisant une fonction du même nom dans la classe dérivée.Une réponse plus complète est disponible ici .
la source
Solution Kotlin:
Ensuite, vous pouvez simplement appeler cette méthode sur votre
TextView
:la source
Type mismatch
erreur avec cette descriptionRequired:ActionMode.Callback! Found:
sur cette partieobject: ActionMode.Callback
. Une idée pourquoi cela ne fonctionne pas?En utilisant d'autres solutions, l'API 26 (Oreo) affichait toujours la poignée du curseur en appuyant une seule fois sur le texte saisi, puis le menu pouvait être affiché. Seule une combinaison de solutions peut résoudre mon problème.
la source
Si vous ne souhaitez pas désactiver le clic long car vous devez exécuter certaines fonctionnalités sur un clic long, renvoyer true est une meilleure option pour le faire.
Votre clic long edittext sera comme ceci.
Selon la documentation, retourner "True" indiquera qu'un clic long a été géré, donc pas besoin d'effectuer des opérations par défaut.
J'ai testé cela sur les niveaux API 16, 22 et 25. Cela fonctionne très bien pour moi. J'espère que cela aidera.
la source
android:longClickable="false"
en XMLhttps://github.com/neopixl/PixlUI fournit
EditText
une méthodemyEditText.disableCopyAndPaste()
.Et ça marche sur l'ancienne API
la source
Voici un hack pour désactiver le popup "coller". Vous devez remplacer la
EditText
méthode:La même chose peut être faite pour les autres actions.
la source
J'ai testé cette solution et cela fonctionne
la source
Lisez le Presse-papiers, vérifiez par rapport à l'entrée et l'heure à laquelle l'entrée est "tapée". Si le Presse-papiers contient le même texte et qu'il est trop rapide, supprimez l'entrée collée.
la source
@Zain Ali, votre réponse fonctionne sur l'API 11. Je voulais juste suggérer un moyen de le faire également sur l'API 10. Comme je devais maintenir mon API de projet sur cette version, je jouais constamment avec les fonctions disponibles dans la 2.3.3 et j'avais la possibilité de le faire. J'ai partagé l'extrait ci-dessous. J'ai testé le code et cela fonctionnait pour moi. J'ai fait cet extrait de code en urgence. N'hésitez pas à améliorer le code s'il y a des changements qui peuvent être apportés.
la source
La solution est très simple
--------> aperçu <---------
la source
Essayez de suivre la classe personnalisée pour le copier-coller existant
Edittext
}
la source
Pour un smartphone avec presse-papiers, il est possible d'éviter comme ça.
la source
Similaire à GnrlKnowledge, vous pouvez effacer le Presse-papiers
http://developer.android.com/reference/android/text/ClipboardManager.html
Si vous le souhaitez, conservez le texte dans le Presse-papiers et sur onDestroy, vous pouvez le redéfinir.
la source
J'ai trouvé que lorsque vous créez un filtre d'entrée pour éviter l'entrée de caractères indésirables, coller ces caractères dans le texte d'édition n'a aucun effet. Donc, cela résout aussi mon problème.
la source
Vous pouvez essayer android: focusableInTouchMode = "false".
la source
La solution qui a fonctionné pour moi a été de créer un Edittext personnalisé et de remplacer la méthode suivante:
}
la source
Essayez d'utiliser.
la source
Qui cherche une solution dans Kotlin utilise la classe ci-dessous comme widget personnalisé et l'utilise dans le xml.
classe SecureEditText: TextInputEditText {
}
la source
J'ai ajouté une fonction d'extension en langue Kotlin :
vous pouvez l'utiliser comme ceci:
également ajouté ci-dessous dans votre xml:
la source