Normalmente, desea la máxima compatibilidad con el comportamiento normal de EditText
.
Por lo tanto, debe no usar android:focusable="false"
ya que, sí, la vista ya no se podrá enfocar, lo que se ve mal. El fondo dibujable ya no mostrará su estado "presionado", por ejemplo.
Lo que debe hacer en su lugar es la siguiente:
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// showMyDialog();
}
});
myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// showMyDialog();
}
}
});
Al establecer el tipo de entrada a TYPE_NULL
, se evita que el teclado de software de aparecer.
Al establecer el OnClickListener
y OnFocusChangeListener
, se asegura de que su diálogo siempre se abrirá cuando el usuario hace clic en el campo EditText
, tanto cuando gana enfoque (primer clic) y en los clics posteriores.
Simplemente estableciendo android:inputType="none"
o setInputType(InputType.TYPE_NULL)
no siempre es suficiente. Para algunos dispositivos, también debe establecer android:editable="false"
en XML, aunque está en desuso. Si ya no funciona, será ignorado (como todos los atributos XML que no son compatibles).
Debe utilizar un control de giro en lugar de un cuadro de diálogo EditarTexto. –