InputType — is een Android-attribuut dat de aard van ingevoerde gegevens en het toetsenbordgedrag voor tekstvelden bepaalt. De waarde InputType vertegenwoordigt een bitmasker dat de invoerklasse (tekst, nummer, telefoon, datum) en modificatoren (meerregelig, automatisch corrigeren, hoofdletters, verborgen invoer) combineert. InputType beïnvloedt het type weergegeven toetsenbord, het filteren van ingevoerde tekens en de werking van automatisch aanvullen. Volgens Android Developers (2026) is InputType een van de belangrijkste attributen voor het waarborgen van correcte gegevensinvoer en moet expliciet worden ingesteld voor elk bewerkbaar tekstveld.
Belangrijkste punten
InputType — is een integerconstante (Int) die de invoermodus voor een tekstveld codeert. In Android is het gedefinieerd in de klasse android.text.InputType. De waarde InputType bestaat uit twee delen: de invoerklasse (bits 0–4) en modificatoren (bits 5–31). De invoerklasse bepaalt het basistype gegevens — tekst, nummer, telefoon, datum. Modificatoren specificeren het gedrag binnen de geselecteerde klasse — bijvoorbeeld voor de tekstklasse kan automatisch corrigeren, hoofdletters of meerregelige invoer worden ingeschakeld.
Het InputType-mechanisme werkt op drie niveaus: op het niveau van het Android-framework bepaalt het welke InputConnection wordt gemaakt (verbinding tussen EditText en IME); op het niveau van IME (toetsenbord) geeft het aan welke tekens worden weergegeven en hoe invoer wordt verwerkt; op het niveau van de applicatie filtert het tekens via de InputFilter die in EditText is ingebouwd. Volgens Android Source Code (AOSP, 2026) wordt het bitmasker verwerkt in de methode TextView.getInputType(), die de huidige waarde retourneert, en setInputType(), die interne filters en de verbinding met IME reconfigureert.
Een belangrijke eigenschap van InputType — het kan om veiligheidsredenen niet uit een ander proces worden gelezen. Dit voorkomt gegevensdiefstal via toegang tot het invoertype (bijvoorbeeld bepalen of een veld een wachtwoord is). Bij een poging om InputType uit een andere applicatie te lezen, wordt standaard TYPE_CLASS_TEXT geretourneerd.
// Basis InputType-constanten
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Masker voor het extraheren van de klasse
InputType.TYPE_MASK_CLASS // 0x0000000F
In Android zijn vier basis-InputType-klassen gedefinieerd. Elke klasse komt overeen met een specifieke gegevenscategorie en activeert het bijbehorende toetsenbordtype. De klasse wordt aangegeven in bits 0–4 van het bitmasker en kan worden geëxtraheerd via het masker TYPE_MASK_CLASS (0x0F).
| Klasse | Constante | Toetsenbord | Toepassing |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Tekst, opmerkingen, beschrijving |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numeriek | Hoeveelheid, prijs, leeftijd |
| PHONE | TYPE_CLASS_PHONE (3) | Telefoon | Telefoonnummer |
| DATETIME | TYPE_CLASS_DATETIME (4) | Datum/tijd | Datum, tijd |
TYPE_CLASS_DATETIME wordt zelden direct gebruikt — meestal wordt voor datum invoer DatePicker of DatePickerDialog gebruikt, niet een tekstveld. In sommige scenario's (snelle handmatige datum invoer) kan deze klasse echter nuttig zijn. Het heeft geen gespecialiseerd toetsenbord en toont meestal een numeriek toetsenbord.
Elke invoerklasse kan worden gecombineerd met variaties (variation) — subtypes aangegeven in bits 5–7. Bijvoorbeeld, TYPE_TEXT_VARIATION_PASSWORD (bit 5) voegt verborgen invoer toe aan de TEXT-klasse. Variatiebits: 0x000000E0 (masker TYPE_MASK_VARIATION).
InputType-vlaggen en modificatoren (bits 8–31) voegen extra mogelijkheden toe aan de basisklasse. Ze veranderen het toetsenbordtype niet, maar wijzigen het invoergedrag. Vlaggen zijn specifiek voor elke klasse — vlaggen voor TEXT werken niet met NUMBER en vice versa. Hieronder staan de belangrijkste modificatoren voor elke klasse.
Volgens Android Developers Documentation (2026) overlappen vlaggen voor verschillende klassen niet — een poging om een TEXT-vlag met NUMBER te gebruiken wordt genegeerd. Om een ingestelde vlag te controleren wordt bitsgewijze AND gebruikt: (inputType and FLAG) != 0.
De juiste combinatie van InputType met klassen en vlaggen is de sleutel tot het maken van gebruiksvriendelijke formulieren. Laten we typische scenario's en bijbehorende InputType-configuraties bekijken. Elk scenario optimaliseert invoer voor een specifiek gegevenstype, maakt het formulier intuïtief en versnelt het invullen.
| Scenario | InputType | Toetsenbord |
|---|---|---|
| Naam | textCapWords | QWERTY, elk woord met hoofdletter |
| textEmailAddress | QWERTY met @ en . | |
| Wachtwoord | textPassword | QWERTY, verborgen invoer |
| Telefoon | phone | Cijfers met +, #, * |
| Prijs | numberDecimal | Cijfers met komma |
| Aantal | number | Alleen cijfers |
| Opmerking | textCapSentences|textMultiLine | QWERTY, meerregelig |
| Zoeken | text|textNoSuggestions | QWERTY zonder suggesties |
// Combinatie voor prijsveld
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Combinatie voor opmerkingenveld
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Het programmatisch instellen van InputType via setInputType() overschrijft de vorige waarde. Als slechts een deel van het masker moet worden gewijzigd (bijvoorbeeld een vlag toevoegen), moet de huidige waarde worden opgeslagen, gewijzigd en opnieuw worden toegepast. Elke aanroep van setInputType() reconfigureert de interne filters van EditText.
De methode setRawInputType() verschilt van setInputType doordat het geen herconfiguratie van filters en suggesties veroorzaakt. Het wordt gebruikt voor tijdelijke wijziging van InputType zonder volledige herlaad van de EditText-status. Na het aanroepen van setInputType() wordt aanbevolen de IME opnieuw te starten om het toetsenbord bij te werken.
// Schakelen tussen wachtwoord en zichtbare tekst
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
}
// Cursorpositie behouden
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Invoerklasse ophalen
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Invoervariatie ophalen
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Controleren of het een wachtwoordveld is
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
De juiste keuze van InputType is niet alleen UX, maar ook veiligheid en gegevenscorrectheid. De belangrijkste aanbevelingen omvatten: stel altijd expliciet InputType in voor elke EditText; gebruik de meest specifieke invoerklasse; combineer geen vlaggen uit verschillende klassen; gebruik voor velden met gevoelige gegevens de PASSWORD-variaties; gebruik voor zoekvelden imeOptions=„actionSearch”.
InputType beïnvloedt ook de werking van toegankelijkheidsdiensten (Accessibility). Velden met het type textPassword krijgen extra bescherming van schermlezers — ze lezen ingevoerde tekens niet hardop voor. Voor velden met textEmailAddress informeert de Screen Reader de gebruiker dat het veld voor e-mail is bedoeld en biedt passende suggesties.
Volgens Material Design Guidelines (2025) moet InputType overeenkomen met het type gegevens dat de gebruiker invoert. Onjuiste InputType vertraagt niet alleen de invoer, maar kan ook leiden tot fouten: bijvoorbeeld, als voor het invoeren van een telefoonnummer textMultiLine wordt gebruikt, toont het toetsenbord geen numeriek blok en moet de gebruiker elke keer handmatig de lay-out wijzigen.
Veelgestelde vragen
InputType — is een EditText-attribuut dat het type ingevoerde gegevens bepaalt via een bitmasker. Keyboard Type — is de niet-officiële naam voor het visuele toetsenbordtype dat door InputType wordt geactiveerd. InputType beïnvloedt ook tekenfiltering, automatische correctie en automatisch aanvullen, niet alleen de toetsenbordindeling.
Stel editText.inputType = InputType.TYPE_CLASS_TEXT in of gebruik de constante InputType.TYPE_NULL (0x00000000) voor volledige reset. Met TYPE_NULL toont het veld geen toetsenbord bij focus. Om terug te keren naar standaard tekstinvoer, stel TYPE_CLASS_TEXT in zonder vlaggen.
Het is niet mogelijk een nieuwe InputType-klasse te maken, omdat deze deel uitmaakt van het Android-framework. U kunt echter bestaande klassen en vlaggen combineren om het gewenste gedrag te bereiken. Implementeer extra tekenfiltering via InputFilter, dat op EditText wordt ingesteld via de methode setFilters().
InputType wordt via InputConnection aan het invoersysteem doorgegeven. IME leest de klasse en variatie van InputType en selecteert de bijbehorende toetsenbordindeling. Bijvoorbeeld, TYPE_CLASS_NUMBER met TYPE_NUMBER_FLAG_DECIMAL zorgt ervoor dat het toetsenbord een numeriek blok met punt toont. De meeste moderne toetsenborden volgen deze aanbevelingen.
Gebruik de eigenschap editText.inputType in Kotlin of de methode editText.getInputType() in Java. Om de klasse te extraheren, pas het masker toe: inputType and InputType.TYPE_MASK_CLASS. Om een specifieke vlag te controleren: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — als het resultaat != 0 is, is de vlag ingesteld.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook