Keyboard Type est une configuration du clavier virtuel dans Android qui définit l’ensemble des caractères affichés et la disposition pour un champ de saisie spécifique. Android prend en charge de nombreux types prédéfinis : text (texte standard), number (numérique), phone (téléphonique), email (avec le symbole @), textPassword (pour les mots de passe), datetime et d’autres. Chaque type optimise l’interface de saisie pour une tâche spécifique — par exemple, le clavier email affiche le symbole @ et le point sur l’écran principal. Selon Android Developers (2026), choisir le bon Keyboard Type réduit le nombre de frappes de 20–40% par rapport à un clavier de texte standard.
Points Clés
Keyboard Type est déterminé par la valeur de l’attribut android:inputType en XML ou par un appel programmatique à setInputType() dans le code. InputType est un masque de bits où la classe de saisie est combinée avec des drapeaux modificateurs. Les classes de base sont : TYPE_CLASS_TEXT pour le texte, TYPE_CLASS_NUMBER pour les nombres, TYPE_CLASS_PHONE pour les téléphones, TYPE_CLASS_DATETIME pour les dates et heures.
Chaque Keyboard Type affecte trois aspects : la disposition du clavier virtuel (quels caractères sont visibles sur l’écran principal), le filtrage des caractères saisis (quels caractères sont autorisés) et le comportement de correction automatique/autocomplétion. Par exemple, le clavier numérique affiche uniquement les chiffres et le séparateur décimal, et il n’affiche pas de lettres même si l’utilisateur change de casse. Selon Android Developers Documentation (2026), combiner des classes avec des drapeaux permet de créer des modes hautement spécialisés : texte multiligne avec correction automatique, nombre à virgule flottante, mot de passe avec prise en charge de l’autocomplétion.
Il est important de comprendre que Keyboard Type est une recommandation au système de saisie (IME). Certains claviers tiers (Gboard, SwiftKey) peuvent ignorer partiellement le type spécifié si l’utilisateur a défini ses propres préférences. Cependant, la plupart des claviers Android standard et Google Gboard suivent strictement le type de saisie spécifié.
// Configuration programmatique du type de clavier
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT est la classe de base pour la saisie de texte. Elle active le clavier QWERTY standard avec lettres, chiffres et symboles. La classe de texte possède le plus grand nombre de modificateurs qui affinent le comportement : TYPE_TEXT_FLAG_CAP_SENTENCES (lettre majuscule automatique en début de phrase), TYPE_TEXT_FLAG_AUTO_CORRECT (correction automatique), TYPE_TEXT_FLAG_MULTI_LINE (mode multiligne), TYPE_TEXT_FLAG_NO_SUGGESTIONS (désactiver les suggestions).
Les modificateurs du clavier de texte peuvent être combinés pour créer des configurations précises : par exemple, text|textCapSentences|textAutoCorrect convient à un champ de saisie de commentaire où la majuscule automatique et la correction des fautes de frappe sont nécessaires. text|textNoSuggestions est utilisé pour la saisie de code ou de termes spéciaux où la correction automatique peut être nocive.
Selon UX Stack Exchange (2025), un clavier de texte avec correction automatique activée accélère la frappe de 15–25% pour l’utilisateur moyen, mais pour les termes techniques (code, URL, email), il est recommandé de désactiver la correction automatique car elle remplace souvent des termes corrects par des termes incorrects.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER active le clavier numérique, qui affiche uniquement les chiffres, le séparateur décimal et le signe moins. Ce type est utilisé pour les champs de saisie de quantité, de prix, d’âge, de codes et d’autres données numériques. Le clavier numérique prend moins de place à l’écran qu’un clavier de texte et élimine la saisie accidentelle de lettres.
Number possède trois modificateurs : TYPE_NUMBER_FLAG_DECIMAL ajoute un point/virgule décimale, TYPE_NUMBER_FLAG_SIGNED ajoute un signe moins pour les nombres négatifs, TYPE_NUMBER_VARIATION_PASSWORD — pour les codes PIN où les chiffres sont affichés comme des caractères cachés. La combinaison number|numberDecimal|numberSigned crée un champ complet pour la saisie de nombres à virgule flottante de tout signe.
// Saisie numérique avec point décimal
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Vérifier le nombre saisi
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE active le clavier téléphonique, qui affiche les chiffres et les caractères typiques des numéros de téléphone : +, #, *, (, ). Contrairement au clavier numérique, phone affiche également une disposition de lettres dans un mode supplémentaire, car les numéros de téléphone peuvent contenir des lettres (par exemple, 1-800-FLOWERS). La classe phone n’a pas de drapeaux supplémentaires mais prend en charge TYPE_TEXT_VARIATION_PHONE_ETC pour la saisie de postes.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS active le clavier email, où le symbole @ et le point se trouvent sur l’écran principal, et les extensions de domaine courantes (.com, .net, .org) sont également disponibles. Gboard affiche en plus des boutons avec les domaines populaires lors de la saisie après @. Le clavier email désactive automatiquement la correction automatique car les adresses email peuvent contenir des combinaisons de caractères non standard.
Selon Google Material Design Guidelines (2025), pour les champs téléphoniques, il est également recommandé de spécifier l’attribut android:digits, qui limite l’ensemble des caractères autorisés. Pour les champs email, il est également important de spécifier autofillHints="email" pour prendre en charge l’autocomplétion des gestionnaires de mots de passe et de Google Autofill.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD et TYPE_NUMBER_VARIATION_PASSWORD sont des modes de saisie pour les données sensibles. Lorsque textPassword est défini, les caractères saisis sont affichés sous forme de points ou d’astérisques (selon la version d’Android et le clavier). Le clavier dans ce mode désactive la correction automatique et l’enregistrement des mots saisis dans le dictionnaire de l’utilisateur, empêchant la fuite de mots de passe via les fonctions de saisie prédictive.
Le clavier Password désactive également la possibilité de prendre des captures d’écran du contenu du champ (drapeau FLAG_SECURE), bien que ce comportement dépende de l’implémentation spécifique du clavier. À partir d’Android 8.0 (API 26), les claviers de mot de passe prennent en charge l’autocomplétion via les gestionnaires de mots de passe si l’attribut importantForAutofill="yes" est défini.
Selon Android Security Recommendations (2025), pour les champs de mot de passe, il est également recommandé de : définir maxLength pour éviter les mots de passe très longs (qui pourraient être un vecteur d’attaque de base de données), utiliser inputType="textPassword" avec TextInputLayout et endIconMode="password_toggle" pour que l’utilisateur puisse vérifier le mot de passe saisi avant de soumettre le formulaire.
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
La configuration programmatique de Keyboard Type permet de changer dynamiquement le mode du clavier selon le contexte ou la saisie de l’utilisateur. Par exemple, lors du changement de type de champ (texte/nombre/date) ou lors du changement de locale. La méthode setInputType() accepte un masque de bits InputType et met à jour immédiatement le clavier si le champ est en focus.
// Basculer entre la saisie de texte et numérique
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// Vérifier si le champ est numérique
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Vérifier si la correction automatique est activée
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
Questions Fréquentes
Si inputType n’est pas spécifié, EditText utilise par défaut TYPE_CLASS_TEXT avec le drapeau TYPE_TEXT_FLAG_MULTI_LINE. Cela signifie un clavier QWERTY standard et une saisie multiligne. Pour la plupart des champs, il est recommandé de spécifier explicitement inputType pour garantir un comportement correct du clavier et le filtrage des caractères.
Utilisez l’attribut android:imeOptions="actionDone" sur EditText. Cela remplacera le bouton Entrée par un bouton Terminé. Autres options : actionSearch (loupe), actionNext (flèche droite), actionSend (envoyer). Traitez l’appui via OnEditorActionListener dans le code.
Vous ne pouvez pas désactiver la vibration pour un champ spécifique — il s’agit d’un paramètre système contrôlé par l’utilisateur dans les paramètres du clavier. Cependant, vous pouvez empêcher le clavier d’apparaître complètement en définissant l’attribut android:focusable="false" sur EditText ou en annulant l’affichage via dispatchTouchEvent.
Définissez android:inputType="none" ou appelez programmatiquement editText.setKeyListener(null). Le champ affichera le texte, mais le clavier n’apparaîtra pas au focus. L’utilisateur pourra sélectionner et copier le texte, mais pas le modifier. Une alternative est d’utiliser TextView avec textIsSelectable="true".
Après avoir appelé setInputType(), vous devez réafficher le clavier car le système peut ne pas mettre à jour l’IME automatiquement. Appelez InputMethodManager.restartInput(view) pour forcer une mise à jour. Si le champ n’est pas en focus, appelez d’abord requestFocus(), puis restartInput.
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