¿Es posible hacer EditText
clickable pero no editable?
No quiero que sea editable (ni debería aparecer el teclado ni deberíamos poder cambiar la pista)
En realidad, quiero usar Editar texto simplemente como una imagen con una pista (que no se puede cambiar). Sé que la forma real era usar un ImageView
y uno TextView
, pero quiero probarlo EditText
porque luego usaré solo una vista en lugar de 2. Además, todo es dinámico, por lo que no XML.
Para el requisito anterior, la solución en XML es, android:editable="false"
pero quiero usar esto en Java.
Pero,
Si uso: -
et.setEnabled(false);
o
et.setKeyListener(null);
Hace que EditText
no sea EDITABLE pero al mismo tiempo hace que no se pueda hacer clic en él.
android
android-layout
android-edittext
Aamir Shah
fuente
fuente
et.setClickable(true)
? Podría funcionar.Respuestas:
El truco aquí es:
et.setFocusable(false); et.setClickable(true);
fuente
puede configurar
EditText
usando el código Java como siguiente: -edittext.setFocusable(false); edittext.setClickable(true);
o utilizando el siguiente código en el archivo XML para
EditText
.android:editable="false" android:inputType="none"
fuente
Como
editable
está en desuso. puede usarandroid:inputType
como none para diseñar xml o como InputType.TYPE_NULL en codificación.<android.support.v7.widget.AppCompatEditText android:id="@+id/edt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:focusable="false" android:inputType="none" android:text="EditText"/>
edt.setClickable(true); edt.setFocusable(false); edt.setInputType(InputType.TYPE_NULL);
Y a continuación se muestra el evento de clic de
edittext
edt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show(); } });
fuente
Puedes usar esto ...
android:focusableInTouchMode="false"
para hacer que edittext no sea editable en xml. Y para el evento en el que se puede hacer clic, puede usar el evento setOnTouchListener () para hacer lo mismo que me gusta.
editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub //do your stuff here.. return false; } });
fuente
android:focusableInTouchMode="false"
también se requiere (android:focusable="false"
solo no funciona) en Android O. Al menos, en DP2.android:editable
está en desuso, pero puede hacer stg como a continuación:android:editable="false" android:focusable="false" android:focusableInTouchMode="false"
Usé la cade anterior para editar textos en los que utilizo selectores para establecer datos. Puede usar el diseño de entrada con esto.
fuente
Edittext
habilitar y deshabilitar para la edición como estaEditText edit = (EditText) findviewby(R.id.edittext);
edit.setEnabled(false); //non editable edit.setEnabled(true); //editable
<EditText android:id="@+id/otp_mpin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:focusable="false"/>
fuente
Para mí, ninguna de las respuestas resultó en una solución completamente funcional.
Muestra de mi solución https://www.youtube.com/watch?v=oUA4Cuxfdqc
Guía (amigable para novatos) , tenga en cuenta los pocos comentarios en el código.
Cree una clase Java para un archivo personalizado
EditText
llamado EditTextDispatched.javaimport android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.RelativeLayout; /** * @author Martin Pfeffer * @see <a href="https://celox.io">https://celox.io</a> */ public class EditTextDispatched extends android.support.v7.widget.AppCompatEditText { private static final String TAG = "DispatchingEditText"; private boolean editable = true; public EditTextDispatched(Context context) { super(context); } public EditTextDispatched(Context context, AttributeSet attrs) { super(context, attrs); } public EditTextDispatched(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // get the current state public boolean isEditable() { return editable; } // set your desired behaviour public void setEditable(boolean editable) { this.editable = editable; } @Override public boolean dispatchTouchEvent(MotionEvent motionEvent) { if (editable) { // default behaviour of an EditText super.dispatchTouchEvent(motionEvent); return true; } // achieve the click-behaviour of a TextView (it's cuztom) ((RelativeLayout) getParent()).onTouchEvent(motionEvent); return true; } }
EditTextDispatched
Haga referencia a en su xml (tendrá que alterar el pgk-name):<io.celox.brutus.EditTextDispatched android:id="@+id/row_field_value" style="@style/row_field_text_display" android:layout_alignParentBottom="true" android:text="@string/sample_field_value" />
Invocar:
private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) { value.setEditable(editable); value.setEnabled(editable); }
fuente
Tal vez puedas intentar
editText.setEnabled(false);
fuente
Sé que esta pregunta ya ha sido respondida, pero para dar una respuesta más actual (es decir, 2018) aquí está la configuración que utilizo para lograr el efecto solicitado (es decir, sin entrada o editable):
val etUserLoc: EditText = themedEditText(R.style.Pale_Blue_Text_Bold_13) { id = R.id.et_comp_user_keys_var_user_location inputType = InputType.TYPE_NULL isClickable = true isFocusable = false textColor = resources.getColor(R.color.magenta) // overrides the default theme color text = Editable.Factory.getInstance().newEditable(resources.getString(R.string.loc_swakopmund)) }.lparams(width = matchConstraint, height = matchParent) { }
Sí, esto es ANKO ya que ya no uso XML en ninguno de mis proyectos de Android. El 'inputType' se encarga de la desaprobación de 'isEditable'.
fuente
A partir de 2020, si también le preocupa la accesibilidad, debe evitar la configuración,
et.setFocusable(false);
ya que eso hará que no se pueda acceder a EditText mediante la navegación del teclado.Aquí está mi solución:
Kotlin
editText.isFocusableInTouchMode = false editText.isLongClickable = false //this will prevent copy and paste editText.setOnClickListener { // handle the click // this will automatically make the edittext clickable = true }
fuente
también puede hacer
android:inputMethod="@null"
en suEditText
y no mostrará el cursor o el teclado y luego puede captar fácilmente el oyente de configuración de clic.fuente