Deshabilitar EditText en android

En mi aplicación tengo un EditText. Quiero que el usuario solo tenga acceso de lectura y no de escritura. En el código, configuré android:enabled="false" . Aunque el fondo de EditText cambió a oscuro, cuando hago clic en él, el teclado aparece y puedo cambiar el texto.

¿Que debería hacer? Gracias

Creo que lo correcto sería establecer android:editable="false" .

Y si se pregunta por qué mi enlace apunta a los atributos de TextView , la respuesta es porque EditText hereda de TextView :

EditText es una chapa delgada sobre TextView que se configura para ser editable.

Actualizar:
Como se menciona en los comentarios a continuación, editable está en desuso ( desde API nivel 3 ). En su lugar, debe utilizar inputType (con el valor none ).

use EditText.setFocusable(false) para deshabilitar la edición
EditText.setFocusableInTouchMode(true) para habilitar la edición;

Use esto para deshabilitar la entrada del usuario

 android:focusable="false" 

android: editable = “false” Este método está en desuso uno.

Puedes probar el siguiente método:

  private void disableEditText(EditText editText) { editText.setFocusable(false); editText.setEnabled(false); editText.setCursorVisible(false); editText.setKeyListener(null); editText.setBackgroundColor(Color.TRANSPARENT); } 

Habilitado EditText:

Habilitado EditText

Disabled EditText:

Disabled EditText

Funciona para mí y espero que te ayude.

Como android:editable="false" está privado. Puedes usar InputType TYPE_NULL en EditText

usar de esta manera:

 editText.setInputType(InputType.TYPE_NULL); 

Como android:editable="false" desuso en xml

Use android:enabled="false" es simple. Por qué usar más código

Si quieres en clase java, también puedes usar programáticamente en clase java

editText.setEnabled (false);

Para desactivar editar EditText , creo que podemos utilizar OR enable pero

  1. Usando android:enabled=... o editText.setEnabled(...)

    También cambia el color del texto en EditText a gris.
    Al hacer clic no tiene efecto

  2. Usando android:focusable=... o editText.setFocusable(false)editText.setFocusableInTouchMode(true)

    No cambia el color del texto de EditText
    Al hacer clic en él, resalta la línea inferior de EditText durante unos pocos milisegundos

Salida

enter image description here

Simplemente:

 editText.setEnabled(false); 

Use TextView en TextView lugar.

si usa android:editable="false" , eclipse le recordará este mensaje “android: editable está en desuso: use inputType en su lugar”.

Por lo tanto, uso android:focusable="false" lugar, funcionó bien para mí.

Establezca las propiedades debajo de la clase:

 editText.setFocusable(false); editText.setEnabled(false); 

Funcionará sin problemas según lo requiera.

Prueba este, funciona bien para mí:

 public class CustomEdittext extends EditText { Boolean mIsTextEditor=true; public CustomEdittext(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override public boolean onCheckIsTextEditor() { // TODO Auto-generated method stub return mIsTextEditor; } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub mIsTextEditor=false; Boolean mOnTouchEvent=super.onTouchEvent(event); mIsTextEditor=true; return mOnTouchEvent; } } 

Nota: this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); agregar this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); en su actividad o si no, el teclado emergerá por primera vez.

En mi caso, necesitaba mi EditText para desplazar el texto si no. de líneas excede maxLines cuando está deshabilitado. Esta implementación funcionó perfectamente para mí.

 private void setIsChatEditTextEditable(boolean value) { if(value) { mEdittext.setCursorVisible(true); mEdittext.setSelection(chat_edittext.length()); // use new EditText(getApplicationContext()).getKeyListener()) if required below mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener()); } else { mEdittext.setCursorVisible(false); mEdittext.setKeyListener(null); } } 

Desde el comentario de @Symptotote sobre la respuesta aceptada, use:

 myEditText.setEnabled(false); myEditText.setInputType(InputType.TYPE_NULL); 

… y Bob es tu tío.

Hoy todavía uso editable="false" , pero también con focusable="false" .

Creo que el caso que necesitamos para hacer que EditText no se pueda editar es porque queremos mantener su estilo EditText (con ese subrayado, con pista, etc.), pero acepta otras entradas en lugar de texto. Por ejemplo, una lista desplegable.

En dicho caso de uso, necesitamos hacer clic en EditText ( enabled="false" no es adecuado). Establecer focusable="false" hace este truco, sin embargo, todavía puedo esperar mucho tiempo sobre EditText y pegar mi propio texto en él desde el portapapeles . Dependiendo de su código y manejo, esto puede incluso bloquear su aplicación.

Entonces también utilicé editable="false" y ahora todo está bien, excepto la advertencia.

puede usar android:focusable="false" pero también necesita deshabilitar el cursor; de lo contrario, la función copiar / pegar seguiría funcionando.

entonces, usa

 android:focusable="false" android:cursorVisible="false" 

Como algunas respuestas lo mencionan, si deshabilita el editText, se vuelve gris y si establece el focalizable falso, el cursor se muestra.

Si quisieras hacerlo solo con xml esto hizo el truco

      

Simplemente agrego un FrameLayout sobre el editText y lo configuro enfocable y se puede hacer clic para que no se pueda hacer clic en editText.

Esto funciona para mí:

android: focusable = “falso”

android:focusableInTouchMode="false"

Establezca esto en su código XML, Funciona.