style - ¿Cómo hacer que EditText no sea editable a través de XML en Android?
propiedades edittext android (24)
¿Puede alguien decirme cómo hacer que un EditText
no sea editable a través de XML? He intentado configurar android:editable
a false
, pero
- está en desuso y
- no funciono
Además de @mahe madi puedes probar esto también
editText.setEnabled(false);
editor.setTextColor(Color.BLACK);
Este método esconderá el cursor, perderá el enfoque y, lo que es más importante, establecerá el color del texto en negro, como TextView.
Y para volver atrás a editText, simplemente haga esto para obtener todas las propiedades de EditText.
editText.setEnabled(true);
Espero eso ayude :)
Agregue esto a su archivo xml EditText:
<EditText ...
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false">
</EditText>
Hará el mismo efecto que android:editable="false"
. Trabajó para mí, espero que funcione para ti también.
Como mencionaste, android: editable está en desuso. android: inputType = "none" debe usarse en su lugar pero no funciona debido a un error ( https://code.google.com/p/android/issues/detail?id=2854 )
Pero puedes lograr lo mismo usando focusable.
Vía XML:
<EditText ...
android:focusable="false"
</EditText>
Desde el código:
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
Como se mencionó en otras respuestas, puede hacer un setEnabled(false)
pero como está preguntando cómo configurarlo a través de XML, aquí está cómo hacerlo.
Agregue el siguiente atributo a su EditText
:
android:enabled="false"
Cuando quiero que una actividad no se enfoque en el texto de edición y tampoco muestre el teclado al hacer clic, esto es lo que funcionó para mí.
Añadiendo atributos al layout principal.
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
y luego el campo EditText
android:focusable="false"
android:focusableInTouchMode="false"
Aquí hay un ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_home"
android:background="@drawable/bg_landing"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="@dimen/activity_vertical_margin"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
tools:context="com.woppi.woppi.samplelapp.HomeActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/fromEditText"
android:layout_weight="1"
android:hint="@string/placeholder_choose_language"
android:textColor="@android:color/white"
android:textColorHint="@android:color/darker_gray"
android:focusable="false"
android:focusableInTouchMode="false"
android:onClick="onSelectFromLanguage" />
</RelativeLayout>
De esta manera el trabajo para mí, puedo selec y copiar en el portapapeles, pero no puedo modificar o pegar.
android:enable="true"
android:textIsSelectable="true"
android:inputType="none"
Deja que tu Edittext sea
EditText editText;
editText.setKeyListener(null);
Funcionará pero simplemente no escucha las claves.
El usuario puede ver un cursor en el texto de edición.
Puedes probar editText.setEnabled(false);
Eso significa que el usuario no puede ver el cursor. Simplemente decir que se convertirá en TextView
.
Esta combinación funcionó para mí:
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
He enfrentado el mismo problema, pero después de la observación descubrí que android:editable="false"
solo funciona cuando inputtype ( android:inputType="ANY_VALUE"
) no aparece en el Edittext.
Elimine inputType de EditText y use editable = false, está funcionando bien.
He intentado lo siguiente:
codeEditText.setInputType(InputType.TYPE_NULL);
this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
pickCode();
}
}
});
this.codeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickCode();
}
});
pero el problema era que si el texto de edición es el primero en el formulario, entonces recibe el foco y el código pickCode () que inicia una nueva actividad se llama de inmediato. Así que modifiqué el código de la siguiente manera y parece que funciona bastante bien (excepto que no puedo establecer el foco en la edición de texto pero no necesito hacerlo):
itemCodeEditText.setFocusable(false);
this.itemCodeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickItem();
}
});
Atentamente,
Comentarios bienvenidos,
John Goche
Hicieron "editables" en desuso, pero no proporcionaron una correspondiente de trabajo en inputType.
Por cierto, inputType = "none" tiene algún efecto? Usarlo o no no hace ninguna diferencia por lo que veo.
Por ejemplo, se dice que el editText predeterminado es una sola línea. Pero tienes que seleccionar un inputType para que sea una sola línea. Y si selecciona "ninguno", sigue siendo multilínea.
Podría usar android:editable="false"
pero realmente le recomendaría que use setEnabled(false)
ya que proporciona una pista visual al usuario de que el control no se puede editar. Todos los widgets deshabilitados utilizan la misma señal visual y la consistencia es buena.
Prueba este código. Está trabajando en mi proyecto, por lo que funcionará en su proyecto.
android:editable="false"
Prueba esto :
android:inputType="none"
Si desea hacer clic en él, pero no desea editarlo, intente:
android:focusable="false"
Si quieres hacerlo en código java solo usa esta línea para deshabilitarlo:
textView.setInputType( InputType.TYPE_NULL );
Y esto para habilitarlo:
textView.setKeyListener(new NumberKeyListener() {
public int getInputType() {
return InputType.TYPE_NULL;
}
protected char[] getAcceptedChars() {
return new char[] {};
}
});
Solo usa android:enabled="false"
. Esto también dará una apariencia al EditText
que hará que se vea no editable.
Traté de hacer:
<EditText
android:id="@+id/txtDate"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="2dp"
android:clickable="false"
android:cursorVisible="false"
android:gravity="center" />
Lo que debería funcionar, pero para mí no lo hizo.
Terminé con este código:
txtDate.setKeyListener(null);
que funciona perfectamente
Tratar
.setInputType(InputType.TYPE_NULL);
Utilice este código simple:
textView.setKeyListener(null);
Funciona.
Editar: Para agregar KeyListener
más tarde, haga lo siguiente
1: establecer la escucha clave para la etiqueta de textView
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2: obtener el oyente clave de la etiqueta y volver a establecerlo en textView
textView.setKeyListener((KeyListener) textView.getTag());
Utilizo EditText.setFocusable(false)
y establezco verdadero nuevamente si quiero editar.
deshabilitar de XML (una línea):
android:focusable="false"
volver a habilitar desde Java, si es necesario (también una línea):
editText.setFocusableInTouchMode(true);
android: editable está en desuso así que usa inputType en su lugar.
<EditText
android:id="@+id/editText_x"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="70"
android:inputType="none"
android:hint="@string/enter_x" />
editText.setEnabled(false);
y uso siguiente:
editText.setEnabled(true);