En mi aplicación, hay una pantalla de registro, donde no quiero que el usuario pueda copiar / pegar texto en el EditText
campo. He configurado uno onLongClickListener
en cada uno EditText
para que no aparezca el menú contextual que muestra el método copiar / pegar / entrada y otras opciones. Por lo tanto, el usuario no podrá copiar / pegar en los campos Editar.
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;
}
};
Pero el problema surge si el usuario ha habilitado un teclado de terceros que no sea el predeterminado de Android, que puede tener un botón para copiar / pegar o que puede mostrar el mismo menú contextual. Entonces, ¿cómo deshabilito copiar / pegar en ese escenario?
Avíseme si hay otras formas de copiar / pegar también. (y posiblemente cómo deshabilitarlos)
Cualquier ayuda sería apreciada.
Respuestas:
Si está utilizando API nivel 11 o superior, puede detener la copia, pegar, cortar y que aparezcan menús contextuales personalizados.
Devolver falso de onCreateActionMode (ActionMode, Menu) evitará que se inicie el modo de acción (acciones Seleccionar todo, Cortar, Copiar y Pegar).
fuente
El mejor método es usar:
fuente
android:longClickable="false"
:)Puede hacer esto deshabilitando la pulsación larga de EditText
Para implementarlo, simplemente agregue la siguiente línea en el xml:
fuente
Puedo desactivar la funcionalidad de copiar y pegar con lo siguiente:
Espero que funcione para ti ;-)
fuente
Aquí hay una mejor manera de deshabilitar cortar, copiar y pegar del trabajo de edición de texto en todas las versiones
fuente
Además de setCustomSelectionActionModeCallback y las soluciones de clic largo deshabilitadas , es necesario evitar que aparezcan los menús PEGAR / REEMPLAZAR cuando se hace clic en el controlador de selección de texto, como se muestra en la imagen a continuación:
La solución radica en evitar que el menú PEGAR / REEMPLAZAR aparezca en el
show()
método de laandroid.widget.Editor
clase (no documentada) . Antes de que aparezca el menú, se realiza una comprobación enif (!canPaste && !canSuggest) return;
. Los dos métodos que se utilizan como base para establecer estas variables están en laEditText
clase:isSuggestionsEnabled()
es público y, por lo tanto, puede ser anulado.canPaste()
no lo es, y por lo tanto debe ocultarse introduciendo una función del mismo nombre en la clase derivada.Una respuesta más completa está disponible aquí .
fuente
Solución Kotlin:
Entonces puede simplemente llamar a este método en su
TextView
:fuente
Type mismatch
error con esta descripciónRequired:ActionMode.Callback! Found:
en esta parteobject: ActionMode.Callback
. ¿Alguna idea de por qué podría no funcionar?Usando otras soluciones, API 26 (Oreo) todavía mostraba el control del cursor con un solo toque en el texto ingresado, y luego se puede mostrar el menú. Solo la combinación de soluciones puede resolver mi problema.
fuente
Si no desea deshabilitar el clic largo porque necesita realizar alguna funcionalidad con un clic largo, entonces devolver verdadero es una mejor opción para hacerlo.
Su clic largo de edición de texto será así.
Según la documentación, "True" indicará que se han manejado los clics largos, por lo que no es necesario realizar operaciones predeterminadas.
Probé esto en API nivel 16, 22 y 25. Funciona bien para mí. Espero que esto ayude.
fuente
android:longClickable="false"
en XMLhttps://github.com/neopixl/PixlUI proporciona un
EditText
métodomyEditText.disableCopyAndPaste()
.Y funciona en la antigua API
fuente
Aquí hay un truco para deshabilitar la ventana emergente "pegar". Tienes que anular el
EditText
método:Similar puede hacerse para las otras acciones.
fuente
He probado esta solución y funciona
fuente
Lea el Portapapeles, verifique la entrada y el tiempo en que la entrada está "escrita". Si el Portapapeles tiene el mismo texto y es demasiado rápido, elimine la entrada pegada.
fuente
@Zain Ali, su respuesta funciona en la API 11. Solo quería sugerir una forma de hacerlo en la API 10 también. Como tenía que mantener mi API de proyecto en esa versión, estaba jugando constantemente con las funciones disponibles en 2.3.3 y tuve la posibilidad de hacerlo. He compartido el fragmento a continuación. Probé el código y estaba funcionando para mí. Hice este fragmento con urgencia. Siéntase libre de mejorar el código si hay algún cambio que pueda hacerse.
fuente
la solución es muy simple
--------> vista previa <---------
fuente
Intente seguir la clase personalizada para copiar y pegar predominantemente
Edittext
}
fuente
Para teléfonos inteligentes con portapapeles, es posible prevenir de esta manera.
fuente
Similar a GnrlKnowledge, puede borrar el Portapapeles
http://developer.android.com/reference/android/text/ClipboardManager.html
Si lo desea, conserve el texto en el Portapapeles y en onDestroy, puede configurarlo nuevamente.
fuente
Descubrí que cuando crea un filtro de entrada para evitar la entrada de caracteres no deseados, pegar dichos caracteres en el texto de edición no tiene ningún efecto. Así que esto también resuelve mi problema.
fuente
Puede probar android: focusableInTouchMode = "false".
fuente
La solución que funcionó para mí fue crear Edittext personalizado y anular el siguiente método:
}
fuente
Tratar de usar.
fuente
Quien está buscando una solución en Kotlin usa la siguiente clase como un widget personalizado y la usa en el xml.
clase SecureEditText: TextInputEditText {
}
fuente
agregué la función de extensión en el idioma Kotlin :
puedes usarlo así:
también agregado debajo de la línea en su xml:
fuente