Normalement, vous voulez un maximum compatibilité avec le comportement normal de EditText
.
Donc vous devriez pas utiliser android:focusable="false"
comme, oui, la vue ne sera plus focalisable ce qui semble mauvais. L'arrière-plan dessinable ne montrera plus son état "pressé", par exemple.
Ce que vous devez faire à la place est la suivante:
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();
}
}
});
En définissant le type d'entrée à TYPE_NULL
, vous empêchez le clavier logiciel de sauter vers le haut.
En définissant la OnClickListener
et OnFocusChangeListener
, vous assurez-vous que votre boîte de dialogue sera toujours ouvert lorsque l'utilisateur clique dans le champ EditText
, aussi bien quand il obtient le focus (premier clic) et sur les clics suivants.
Le simple réglage android:inputType="none"
ou setInputType(InputType.TYPE_NULL)
n'est pas toujours suffisant. Pour certains périphériques, vous devez également définir android:editable="false"
en XML, même s'il est obsolète. Si cela ne fonctionne plus, il sera simplement ignoré (comme tous les attributs XML qui ne sont pas supportés).
Vous devez utiliser une fileuse au lieu d'un dialogue EditText. –