studio programacion herramientas fundamentos con avanzado aplicaciones android android-edittext

programacion - Deshabilitar EditText en android



manual de android en pdf (17)

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


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);


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

usar de esta manera:

editText.setInputType(InputType.TYPE_NULL);


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 ).


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

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

... y Bob es tu tío.


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); } }


Establezca las propiedades debajo de la clase:

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

Funcionará sin problemas según lo requiera.


Esto funciona para mí:

android: focusable = "falso"


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.


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


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:

Disabled EditText:

Funciona para mí y espero que te ayude.


Simplemente:

editText.setEnabled(false);


Use TextView en TextView lugar.


Use esto para deshabilitar la entrada del usuario

android:focusable="false"

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


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"


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í.


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


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.