InputType ist ein Android-Attribut, das die Art der Eingabedaten und das Tastaturverhalten für Textfelder bestimmt. Der InputType-Wert ist eine Bitmaske, die die Eingabeklasse (Text, Zahl, Telefon, Datum) und Modifikatoren (mehrzeilig, Autokorrektur, Großbuchstaben, versteckte Eingabe) kombiniert. InputType beeinflusst den Typ der angezeigten Tastatur, die Filterung von Eingabezeichen und das Autofill-Verhalten. Laut Android Developers (2026) ist InputType eines der wichtigsten Attribute zur Gewährleistung korrekter Dateneingabe und sollte für jedes bearbeitbare Textfeld explizit festgelegt werden.
Wichtige Erkenntnisse
InputType ist eine ganzzahlige Konstante (Int), die den Eingabemodus für ein Textfeld codiert. In Android ist sie in der Klasse android.text.InputType definiert. Der InputType-Wert besteht aus zwei Teilen: der Eingabeklasse (Bits 0–4) und den Modifikatoren (Bits 5–31). Die Eingabeklasse definiert den grundlegenden Datentyp — Text, Zahl, Telefon, Datum. Die Modifikatoren verfeinern das Verhalten innerhalb der ausgewählten Klasse — zum Beispiel können Sie für die Textklasse die Autokorrektur, Großbuchstaben oder mehrzeilige Eingabe aktivieren.
Der InputType-Mechanismus funktioniert auf drei Ebenen: Auf der Android-Framework-Ebene bestimmt er, welcher InputConnection erstellt wird (die Verbindung zwischen EditText und IME); auf der IME-Ebene (Tastatur) gibt er an, welche Zeichen angezeigt und wie Eingaben verarbeitet werden; auf der Anwendungsebene filtert er Zeichen durch den in EditText integrierten InputFilter. Laut Android Source Code (AOSP, 2026) wird die Bitmaske in der Methode TextView.getInputType(), die den aktuellen Wert zurückgibt, und setInputType(), die interne Filter und die IME-Verbindung neu konfiguriert, verarbeitet.
Eine wichtige Eigenschaft von InputType ist, dass es aus Sicherheitsgründen nicht von einem anderen Prozess gelesen werden kann. Dies verhindert Datendiebstahl durch Zugriff auf den Eingabetyp (z.B. Feststellung, ob ein Feld ein Passwort ist). Beim Versuch, InputType aus einer anderen Anwendung zu lesen, wird standardmäßig TYPE_CLASS_TEXT zurückgegeben.
// Grundlegende InputType-Konstanten
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Maske zum Extrahieren der Klasse
InputType.TYPE_MASK_CLASS // 0x0000000F
Android definiert vier grundlegende InputType-Klassen. Jede Klasse entspricht einer bestimmten Datenkategorie und aktiviert den entsprechenden Tastaturtyp. Die Klasse wird in den Bits 0–4 der Bitmaske angegeben und kann über die Maske TYPE_MASK_CLASS (0x0F) extrahiert werden.
| Klasse | Konstante | Tastatur | Verwendung |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTZ-Tastatur | Text, Kommentare, Beschreibung |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerisch | Menge, Preis, Alter |
| PHONE | TYPE_CLASS_PHONE (3) | Telefon | Telefonnummer |
| DATETIME | TYPE_CLASS_DATETIME (4) | Datum/Uhrzeit | Datum, Uhrzeit |
TYPE_CLASS_DATETIME wird selten direkt verwendet — für die Datumseingabe werden normalerweise DatePicker oder DatePickerDialog anstelle eines Textfelds verwendet. In einigen Szenarien (schnelle manuelle Datumseingabe) kann diese Klasse jedoch nützlich sein. Sie hat keine spezialisierte Tastatur und zeigt normalerweise eine numerische Tastatur an.
Jede Eingabeklasse kann mit Variationen kombiniert werden — Untertypen, die in den Bits 5–7 angegeben sind. Beispielsweise fügt TYPE_TEXT_VARIATION_PASSWORD (Bit 5) der TEXT-Klasse eine versteckte Eingabe hinzu. Variationsbits: 0x000000E0 (TYPE_MASK_VARIATION-Maske).
Die Modifikator-Flags von InputType (Bits 8–31) fügen der Basisklasse zusätzliche Fähigkeiten hinzu. Sie ändern nicht den Tastaturtyp, sondern modifizieren das Eingabeverhalten. Flags sind für jede Klasse spezifisch — TEXT-Flags funktionieren nicht mit NUMBER und umgekehrt. Nachfolgend sind die wichtigsten Modifikatoren für jede Klasse aufgeführt.
Laut Android Developers Documentation (2026) überschneiden sich Flags verschiedener Klassen nicht — der Versuch, ein TEXT-Flag mit NUMBER zu verwenden, wird ignoriert. Um ein gesetztes Flag zu überprüfen, verwenden Sie bitweises UND: (inputType and FLAG) != 0.
Die richtige Kombination von InputType-Klassen und -Flags ist der Schlüssel zur Erstellung benutzerfreundlicher Formulare. Betrachten wir typische Szenarien und ihre entsprechenden InputType-Konfigurationen. Jedes Szenario optimiert die Eingabe für einen bestimmten Datentyp, macht das Formular intuitiv und beschleunigt das Ausfüllen.
| Szenario | InputType | Tastatur |
|---|---|---|
| Name | textCapWords | QWERTZ, jedes Wort groß |
| textEmailAddress | QWERTZ mit @ und . | |
| Passwort | textPassword | QWERTZ, versteckte Eingabe |
| Telefon | phone | Ziffern mit +, #, * |
| Preis | numberDecimal | Ziffern mit Dezimalpunkt |
| Menge | number | Nur Ziffern |
| Kommentar | textCapSentences|textMultiLine | QWERTZ, mehrzeilig |
| Suche | text|textNoSuggestions | QWERTZ ohne Vorschläge |
// Kombination für Preisfeld
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Kombination für Kommentarfeld
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Das programmatische Setzen von InputType über setInputType() überschreibt den vorherigen Wert. Wenn Sie nur einen Teil der Maske ändern müssen (z.B. ein Flag hinzufügen), müssen Sie den aktuellen Wert speichern, ändern und erneut anwenden. Jeder Aufruf von setInputType() konfiguriert die internen EditText-Filter neu.
Die Methode setRawInputType() unterscheidet sich von setInputType dadurch, dass sie keine Neukonfiguration von Filtern und Vorschlägen auslöst. Sie wird verwendet, um InputType vorübergehend zu ändern, ohne den gesamten EditText-Zustand neu zu laden. Nach dem Aufruf von setInputType() wird empfohlen, das IME neu zu starten, um die Tastatur zu aktualisieren.
// Zwischen Passwort und sichtbarem Text umschalten
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
}
// Cursorposition beibehalten
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Eingabeklasse abrufen
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Eingabevariation abrufen
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Prüfen, ob Passwortfeld
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Die Wahl des richtigen InputType betrifft nicht nur die UX, sondern auch die Sicherheit und Datenkorrektheit. Zu den wichtigsten Empfehlungen gehören: immer einen expliziten InputType für jedes EditText angeben; die spezifischste mögliche Eingabeklasse verwenden; keine Flags aus verschiedenen Klassen kombinieren; PASSWORD-Variationen für sensible Datenfelder verwenden; imeOptions="actionSearch" für Suchfelder verwenden.
InputType beeinflusst auch die Bedienung der Barrierefreiheitsdienste (Accessibility). Felder mit dem Typ textPassword erhalten zusätzlichen Schutz durch Bildschirmleseprogramme — sie lesen eingegebene Zeichen nicht vor. Bei textEmailAddress-Feldern teilt der Screenreader dem Benutzer mit, dass das Feld für E-Mails bestimmt ist, und gibt entsprechende Hinweise.
Laut Material Design Guidelines (2025) sollte der InputType mit dem Datentyp übereinstimmen, den der Benutzer eingibt. Ein falscher InputType verlangsamt nicht nur die Eingabe, sondern kann auch zu Fehlern führen: zum Beispiel, wenn Sie für ein Telefonnummernfeld textMultiLine belassen, zeigt die Tastatur keinen Ziffernblock an, und der Benutzer muss jedes Mal manuell das Layout wechseln.
Häufig gestellte Fragen
InputType ist ein EditText-Attribut, das den Typ der Eingabedaten durch eine Bitmaske definiert. Keyboard Type ist ein inoffizieller Name für den visuellen Tastaturtyp, der durch InputType aktiviert wird. InputType beeinflusst auch die Zeichenfilterung, Autokorrektur und Autovervollständigung — nicht nur das Tastaturlayout.
Setzen Sie editText.inputType = InputType.TYPE_CLASS_TEXT oder verwenden Sie die Konstante InputType.TYPE_NULL (0x00000000) für einen vollständigen Reset. Bei TYPE_NULL zeigt das Feld bei Fokus keine Tastatur an. Um zur Standardtexteingabe zurückzukehren, setzen Sie TYPE_CLASS_TEXT ohne Flags.
Sie können keine neue InputType-Klasse erstellen, da sie Teil des Android-Frameworks ist. Sie können jedoch vorhandene Klassen und Flags kombinieren, um das gewünschte Verhalten zu erzielen. Implementieren Sie zusätzliche Zeichenfilterung über InputFilter, der mit der Methode setFilters() auf EditText gesetzt wird.
InputType wird über InputConnection an das Eingabesystem übergeben. Das IME liest die InputType-Klasse und -Variation und wählt das entsprechende Tastaturlayout aus. Beispielsweise bewirkt TYPE_CLASS_NUMBER mit TYPE_NUMBER_FLAG_DECIMAL, dass die Tastatur einen Ziffernblock mit Dezimalpunkt anzeigt. Die meisten modernen Tastaturen befolgen diese Empfehlungen.
Verwenden Sie die Eigenschaft editText.inputType in Kotlin oder editText.getInputType() in Java. Um die Klasse zu extrahieren, wenden Sie die Maske an: inputType and InputType.TYPE_MASK_CLASS. Um ein bestimmtes Flag zu überprüfen: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — wenn das Ergebnis != 0 ist, ist das Flag gesetzt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch