En este post te voy a explicar cómo configurar un elemento EditText de Android para que no se puedan modificar los datos, es decir, que sea de solo lectura; pero que sí se pueda tocar y desencadenar el listener correspondiente.
Deshabilitar edición de EditText
Para ello simplemente tienes que agregar algunos atributos XML al EditText:
clickable
: para que el usuario pueda hacer click sobre él, debe estar entrue
focusable
: que no se le pueda dar focus, debe estar enfalse
inputType
:none
textIsSelectable
:false
Aquí pongo un ejemplo para deshabilitar la edición en un EditText:
<EditText
android:id="@+id/etFecha"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:clickable="true"
android:ems="10"
android:focusable="false"
android:inputType="none"
android:textIsSelectable="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout" />
De este modo los listeners van a seguir funcionando, pero el usuario no podrá escribir texto.
Pequeña nota
El usuario siempre va a encontrar la manera de habilitar la escritura, por ejemplo, podría pegar texto, cosa que se puede deshabilitar como se ve aquí.
A lo que me refiero es que no deberías confiar en la validación de ese modo; simplemente usa esto para la parte de la interfaz, y haz la validación en un lugar que no sea la vista.