InputType est un attribut Android qui détermine la nature des données saisies et le comportement du clavier pour les champs de texte. La valeur InputType est un masque de bits qui combine la classe de saisie (texte, nombre, téléphone, date) et des modificateurs (multiligne, correction automatique, majuscules, saisie masquée). InputType affecte le type de clavier affiché, le filtrage des caractères saisis et le comportement de saisie automatique. Selon Android Developers (2026), InputType est l'un des attributs les plus importants pour garantir une saisie correcte des données et doit être défini explicitement pour chaque champ de texte modifiable.
Points clés
InputType est une constante entière (Int) qui code le mode de saisie pour un champ de texte. Dans Android, elle est définie dans la classe android.text.InputType. La valeur InputType se compose de deux parties : la classe de saisie (bits 0–4) et les modificateurs (bits 5–31). La classe de saisie définit le type de données de base — texte, nombre, téléphone, date. Les modificateurs précisent le comportement au sein de la classe sélectionnée — par exemple, pour la classe texte, vous pouvez activer la correction automatique, les majuscules ou la saisie multiligne.
Le mécanisme InputType fonctionne à trois niveaux : au niveau du framework Android, il détermine quel InputConnection sera créé (la connexion entre EditText et IME) ; au niveau de l'IME (clavier), il spécifie quels caractères afficher et comment gérer la saisie ; au niveau de l'application, il filtre les caractères via l'InputFilter intégré dans EditText. Selon Android Source Code (AOSP, 2026), le masque de bits est traité dans la méthode TextView.getInputType(), qui retourne la valeur actuelle, et setInputType(), qui reconfigure les filtres internes et la connexion IME.
Une caractéristique importante d'InputType est qu'il ne peut pas être lu depuis un autre processus pour des raisons de sécurité. Cela empêche le vol de données via l'accès au type de saisie (par exemple, déterminer si un champ est un mot de passe). Lorsqu'on tente de lire InputType depuis une autre application, TYPE_CLASS_TEXT est retourné par défaut.
// Constantes InputType de base
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Masque pour extraire la classe
InputType.TYPE_MASK_CLASS // 0x0000000F
Android définit quatre classes de base InputType. Chaque classe correspond à une catégorie de données spécifique et active le type de clavier correspondant. La classe est spécifiée dans les bits 0–4 du masque de bits et peut être extraite via le masque TYPE_MASK_CLASS (0x0F).
| Classe | Constante | Clavier | Utilisation |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | Clavier QWERTY | Texte, commentaires, description |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numérique | Quantité, prix, âge |
| PHONE | TYPE_CLASS_PHONE (3) | Téléphone | Numéro de téléphone |
| DATETIME | TYPE_CLASS_DATETIME (4) | Date/heure | Date, heure |
TYPE_CLASS_DATETIME est rarement utilisé directement — pour la saisie de dates, on utilise généralement DatePicker ou DatePickerDialog plutôt qu'un champ de texte. Cependant, dans certains scénarios (saisie manuelle rapide de date), cette classe peut être utile. Elle n'a pas de clavier spécialisé et affiche généralement un clavier numérique.
Chaque classe de saisie peut être combinée avec des variations — des sous-types spécifiés dans les bits 5–7. Par exemple, TYPE_TEXT_VARIATION_PASSWORD (bit 5) ajoute une saisie masquée à la classe TEXT. Bits de variation : 0x000000E0 (masque TYPE_MASK_VARIATION).
Les indicateurs modificateurs d'InputType (bits 8–31) ajoutent des capacités supplémentaires à la classe de base. Ils ne changent pas le type de clavier mais modifient le comportement de saisie. Les indicateurs sont spécifiques à chaque classe — les indicateurs TEXT ne fonctionnent pas avec NUMBER, et vice versa. Voici les principaux modificateurs pour chaque classe.
Selon Android Developers Documentation (2026), les indicateurs de différentes classes ne se chevauchent pas — essayer d'utiliser un indicateur TEXT avec NUMBER sera ignoré. Pour vérifier un indicateur défini, utilisez le ET binaire : (inputType and FLAG) != 0.
La bonne combinaison de classes et d'indicateurs InputType est la clé pour créer des formulaires conviviaux. Examinons des scénarios typiques et leurs configurations InputType correspondantes. Chaque scénario optimise la saisie pour un type de données spécifique, rendant le formulaire intuitif et accélérant son remplissage.
| Scénario | InputType | Clavier |
|---|---|---|
| Nom | textCapWords | QWERTY, chaque mot avec majuscule |
| textEmailAddress | QWERTY avec @ et . | |
| Mot de passe | textPassword | QWERTY, saisie masquée |
| Téléphone | phone | Chiffres avec +, #, * |
| Prix | numberDecimal | Chiffres avec point décimal |
| Quantité | number | Chiffres uniquement |
| Commentaire | textCapSentences|textMultiLine | QWERTY, multiligne |
| Recherche | text|textNoSuggestions | QWERTY sans suggestions |
// Combinaison pour champ de prix
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Combinaison pour champ de commentaire
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Définir InputType programmatiquement via setInputType() écrase la valeur précédente. Si vous devez modifier seulement une partie du masque (par exemple, ajouter un indicateur), vous devez enregistrer la valeur actuelle, la modifier et la réappliquer. Chaque appel à setInputType() reconfigure les filtres internes d'EditText.
La méthode setRawInputType() diffère de setInputType en ce qu'elle ne déclenche pas la reconfiguration des filtres et des suggestions. Elle est utilisée pour modifier temporairement InputType sans recharger complètement l'état d'EditText. Après avoir appelé setInputType(), il est recommandé de redémarrer l'IME pour mettre à jour le clavier.
// Basculer entre mot de passe et texte visible
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Conserver la position du curseur
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Obtenir la classe de saisie
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Obtenir la variation de saisie
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Vérifier si le champ est un mot de passe
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Choisir le bon InputType n'est pas seulement une question d'UX, mais aussi de sécurité et d'exactitude des données. Les principales recommandations incluent : toujours spécifier un InputType explicite pour chaque EditText ; utiliser la classe de saisie la plus spécifique possible ; ne pas combiner des indicateurs de différentes classes ; utiliser des variations PASSWORD pour les champs de données sensibles ; utiliser imeOptions="actionSearch" pour les champs de recherche.
InputType affecte également le fonctionnement des services d'accessibilité (Accessibility). Les champs de type textPassword bénéficient d'une protection supplémentaire des lecteurs d'écran — ils ne lisent pas les caractères saisis à voix haute. Pour les champs textEmailAddress, le lecteur d'écran informe l'utilisateur que le champ est destiné à l'email et fournit des suggestions appropriées.
Selon Material Design Guidelines (2025), InputType doit correspondre au type de données que l'utilisateur saisit. Un InputType incorrect non seulement ralentit la saisie, mais peut aussi entraîner des erreurs : par exemple, si vous laissez textMultiLine pour un champ de numéro de téléphone, le clavier n'affichera pas le pavé numérique et l'utilisateur devra changer manuellement de disposition à chaque fois.
Questions fréquentes
InputType est un attribut EditText qui définit le type de données saisies via un masque de bits. Keyboard Type est un nom non officiel pour le type de clavier visuel activé par InputType. InputType affecte également le filtrage des caractères, la correction automatique et la saisie semi-automatique — pas seulement la disposition du clavier.
Définissez editText.inputType = InputType.TYPE_CLASS_TEXT ou utilisez la constante InputType.TYPE_NULL (0x00000000) pour une réinitialisation complète. Avec TYPE_NULL, le champ n'affichera pas de clavier lors de la prise de focus. Pour revenir à la saisie de texte standard, définissez TYPE_CLASS_TEXT sans indicateurs.
Vous ne pouvez pas créer une nouvelle classe InputType car elle fait partie du framework Android. Cependant, vous pouvez combiner des classes et des indicateurs existants pour obtenir le comportement souhaité. Implémentez un filtrage supplémentaire des caractères via InputFilter, qui est défini sur EditText à l'aide de la méthode setFilters().
InputType est transmis au système de saisie via InputConnection. L'IME lit la classe et la variation d'InputType et sélectionne la disposition de clavier correspondante. Par exemple, TYPE_CLASS_NUMBER avec TYPE_NUMBER_FLAG_DECIMAL fait que le clavier affiche un pavé numérique avec point décimal. La plupart des claviers modernes suivent ces recommandations.
Utilisez la propriété editText.inputType en Kotlin ou editText.getInputType() en Java. Pour extraire la classe, appliquez le masque : inputType and InputType.TYPE_MASK_CLASS. Pour vérifier un indicateur spécifique : inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — si le résultat != 0, l'indicateur est défini.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi