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
Usando
android:enabled=...
oeditText.setEnabled(...)
También cambia el color del texto en
EditText
a gris.
Al hacer clic no tiene efectoUsando
android:focusable=...
oeditText.setFocusable(false)
-editText.setFocusableInTouchMode(true)
No cambia el color del texto de
EditText
Al hacer clic en él, resalta la línea inferior deEditText
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.