Quiero hacer una EditText
vista de solo lectura . El XML para hacer este código parece serlo android:editable="false"
, pero quiero hacerlo en código.
¿Cómo puedo hacer esto?
android
android-edittext
advertir
fuente
fuente
android:editable
está en desusoEditText
.UI.setReadOnly(myEditText, true)
de esta biblioteca . Hay algunas propiedades que deben configurarse, que puede consultar en el código fuente .android:inputType="none"
yandroid:textIsSelectable="true"
Respuestas:
Utilice este código.
fuente
Si
setEnabled(false)
entonceseditText
se verá deshabilitado (gris, etc.). Es posible que no desee cambiar el aspecto visual de su editor.Una forma menos intrusiva sería usar
setFocusable(false)
.Creo que esto responde a su pregunta más cerca de su intención inicial.
fuente
setFocusable(false)
(e inclusosetFocusableInTouchMode(false)
consetClickable(false)
) aún puede cambiar el valor de sueditText
presionando sueditText
durante unos cientos de milisegundos y seleccionando laPaste
opción a menos que el portapapeles del sistema esté vacío. Lo probé con la API más nueva disponible, que es 23 .En
XML
uso:Como ejemplo:
fuente
editable
atributo no parece estar obsoleto (al menos, no a partir del nivel de API 23).android:inputType="none"
android:inputType="none"
y los datos aún se pueden editar.Esto funciona para mi:
fuente
Lo mejor es usar en su
TextView
lugar.fuente
Según los documentos, esto evita que se muestre el teclado virtual. También evita el pegado, permite el desplazamiento y no altera el aspecto visual de la vista. Sin embargo, esto también evita la selección y copia del texto dentro de la vista.
De mis pruebas establecer
setInputType
aTYPE_NULL
que parece ser funcionalmente equivalente a la depreciadoandroid:editable="false"
. Además,android:inputType="none"
parece no tener ningún efecto notable.fuente
android:inputType="none"
ya no funciona.android: editable = "false" ha quedado obsoleto. Por lo tanto, no puede usarlo para hacer que el texto editado sea de solo lectura.
He hecho esto usando la siguiente solución. Aquí he usado
android: inputType = "ninguno"
android: textIsSelectable = "true"
android: focusable = "falso"
Pruébalo :)
fuente
android:enabled="false"
puede ser una buena alternativa.Esto le dará un filtro EditText no editable. primero debe poner el texto que desea en el campo editText y luego aplicar este filtro.
fuente
return dst.subSequence(dstart, dend);
escribir estas dos líneas es más que suficiente para tu trabajo.
fuente
establecido en XML
fuente
Intenta usar
fuente
Si se establece, especifica que
TextView
tiene un método de entrada. Será textual a menos que se especifique lo contrario. PorqueTextView
esto es falso por defecto. PorqueEditText
es cierto por defecto.Debe ser un
boolean
valor, ya seatrue
ofalse
.Esto también puede ser una referencia a un recurso (en el formulario
@[package:]type:name
) o atributo de tema (en el formulario?[package:][type:]name
) que contiene un valor de este tipo.Esto corresponde al símbolo de recurso de atributo global editable.
Métodos relacionados
fuente
Intente anular el oyente onLongClick del texto de edición para eliminar el menú contextual:
fuente
Utilice este código:
La desactivación
editText
proporciona un aspecto y un comportamiento de solo lectura, pero también cambiatext-color
a gris, por lo que es necesario configurar el color del texto.fuente
esta es mi implementación (un poco larga, ¡pero útil para mí!): Con este código puede hacer que EditView sea de solo lectura o Normal. incluso en estado de solo lectura, el usuario puede copiar el texto. puede cambiar el fondo para que se vea diferente de un EditText normal.
el beneficio de este código es que EditText se muestra como EditText normal pero el contenido no se puede cambiar. El valor de retorno debe mantenerse como una variable para que uno pueda volver del estado de solo lectura a normal.
para hacer un EditText de solo lectura, simplemente póngalo como:
y para que sea normal, use tw de la declaración anterior:
fuente
Esto funcionó para mí, teniendo en cuenta varias de las sugerencias anteriores. Hace que TextEdit se pueda enfocar, pero si el usuario hace clic o enfoca, mostramos una lista de selecciones en una ventana emergente. (Estamos reemplazando el loco widget Spinner). TextEdit xml es muy genérico ...
fuente
Si solo desea poder copiar texto del control pero no puede editarlo, es posible que desee usar un TextView en su lugar y establecer que el texto sea seleccionable .
código:
xml:
La documentación de setTextIsSelectable dice:
Sin embargo, tuve que establecer explícitamente focusable y focusableInTouchMode en true para que funcionara con la entrada táctil.
fuente
Esta fue la única solución completa y simple para mí.
fuente
No tuve ningún problema para hacer EditTextPreference de solo lectura, usando:
Esto funciona bien cuando se combina con el uso del campo 'resumen' para mostrar campos de solo lectura (útil para mostrar información de cuenta, por ejemplo). Actualización de los campos de resumen extraídos dinámicamente de http://gmariotti.blogspot.com/2013/01/preferenceactivity-preferencefragment.html
fuente
Establezca esto en el archivo xml EdiTextView
fuente
Como
android:editable=""
está en desuso,Setting
android:clickable="false"
android:focusable="false"
android:inputType="none"
android:cursorVisible="false"
lo hará "de sólo lectura".
Sin embargo, los usuarios aún podrán pegar en el campo o realizar cualquier otra acción de clic largo. Para deshabilitar esto, simplemente anule onLongClickListener ().
En Kotlin:
myEditText.setOnLongClickListener { true }
es suficiente.
fuente
Mi enfoque para esto ha sido crear una clase TextWatcher personalizada de la siguiente manera:
Luego, simplemente agregue ese observador a cualquier campo que desee que sea de solo lectura a pesar de estar habilitado:
fuente