InputType — vad är det, inmatningsattribut och deras konfiguration i Android

Författare: IT Sectr Publicerad: 2026-07-07 Lästid: 9 min

InputType — är ett Android-attribut som bestämmer karaktären på inmatade data och tangentbordsbeteende för textfält. Värdet InputType representerar en bitmask som kombinerar inmatningsklass (text, nummer, telefon, datum) och modifierare (flerradig, automatisk korrigering, versaler, dold inmatning). InputType påverkar typen av visat tangentbord, filtrering av inmatade tecken och funktionen för automatisk komplettering. Enligt Android Developers (2026) är InputType en av de viktigaste attributen för att säkerställa korrekt datainmatning och bör uttryckligen anges för varje redigerbart textfält.

Huvudpunkter

  • InputType — bitmask som bestämmer inmatningsklass och modifierare för EditText.
  • Inmatningsklasser — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Modifierare — flaggor som specificerar beteende: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Kombinering — klass och modifierare kombineras via bitvis OR för exakt konfiguration.
  • Påverkan — korrekt InputType snabbar upp inmatning, minskar fel och förbättrar formulärets UX.

Vad är InputType i Android

InputType — är en heltalskonstant (Int) som kodar inmatningsläget för ett textfält. I Android definieras den i klassen android.text.InputType. Värdet InputType består av två delar: inmatningsklass (bitar 0–4) och modifierare (bitar 5–31). Inmatningsklassen bestämmer grundläggande datatyp — text, nummer, telefon, datum. Modifierare specificerar beteendet inom den valda klassen — till exempel för textklassen kan automatisk korrigering, versaler eller flerradig inmatning aktiveras.

InputType-mekanismen fungerar på tre nivåer: på Android-ramverkets nivå bestämmer den vilken InputConnection som skapas (anslutning mellan EditText och IME); på IME-nivå (tangentbord) anger den vilka tecken som ska visas och hur inmatning ska behandlas; på applikationsnivå filtrerar den tecken via InputFilter inbyggd i EditText. Enligt Android Source Code (AOSP, 2026) bearbetas bitmasken i metoden TextView.getInputType(), som returnerar aktuellt värde, och setInputType(), som omkonfigurerar interna filter och anslutning till IME.

En viktig egenskap hos InputType — den kan inte läsas från en annan process av säkerhetsskäl. Detta förhindrar datastöld via åtkomst till inmatningstyp (till exempel att avgöra om ett fält är ett lösenord). Vid försök att läsa InputType från en annan applikation returneras TYPE_CLASS_TEXT som standard.

kotlin
// Grundläggande InputType-konstanter
InputType.TYPE_CLASS_TEXT       // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER     // 0x0002 = 2
InputType.TYPE_CLASS_PHONE      // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME   // 0x0004 = 4

// Mask för att extrahera klass
InputType.TYPE_MASK_CLASS       // 0x0000000F

InputType-klasser: TEXT, NUMBER, PHONE, DATETIME

I Android definieras fyra grundläggande InputType-klasser. Varje klass motsvarar en specifik datakategori och aktiverar motsvarande tangentbordstyp. Klassen anges i bitar 0–4 i bitmasken och kan extraheras via masken TYPE_MASK_CLASS (0x0F).

KlassKonstantTangentbordAnvändning
TEXTTYPE_CLASS_TEXT (1)QWERTYText, kommentarer, beskrivning
NUMBERTYPE_CLASS_NUMBER (2)NumerisktKvantitet, pris, ålder
PHONETYPE_CLASS_PHONE (3)TelefonTelefonnummer
DATETIMETYPE_CLASS_DATETIME (4)Datum/tidDatum, tid

TYPE_CLASS_DATETIME används sällan direkt — vanligtvis för datum inmatning används DatePicker eller DatePickerDialog, inte ett textfält. Men i vissa scenarier (snabb manuell datum inmatning) kan denna klass vara användbar. Den har inget specialiserat tangentbord och visar vanligtvis ett numeriskt tangentbord.

Varje inmatningsklass kan kombineras med variationer (variation) — undertyper angivna i bitar 5–7. Till exempel lägger TYPE_TEXT_VARIATION_PASSWORD (bit 5) till dold inmatning till TEXT-klassen. Variationsbitar: 0x000000E0 (mask TYPE_MASK_VARIATION).

InputType-flaggor och modifierare

InputType-flaggor och modifierare (bitar 8–31) lägger till extra funktioner till basklassen. De ändrar inte tangentbordstypen men modifierar inmatningsbeteendet. Flaggorna är specifika för varje klass — flaggor för TEXT fungerar inte med NUMBER och vice versa. Nedan listas de viktigaste modifierarna för varje klass.

Flaggor för TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — alla bokstäver versaler.
  • TYPE_TEXT_FLAG_CAP_WORDS — varje ord börjar med versal.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — versal i början av mening (standard).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — automatisk rättning av stavfel.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — automatisk komplettering (för AutoCompleteTextView).
  • TYPE_TEXT_FLAG_MULTI_LINE — flerradig inmatning.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — inaktivera förslag.

Flaggor för NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — tillåter negativa tal (minustecken).
  • TYPE_NUMBER_FLAG_DECIMAL — tillåter decimalkomma.

Enligt Android Developers Documentation (2026) överlappar inte flaggor för olika klasser — ett försök att använda TEXT-flagga med NUMBER ignoreras. För att kontrollera en inställd flagga används bitvis AND: (inputType and FLAG) != 0.

InputType-kombinationer: exempel för olika scenarier

Rätt kombination av InputType med klasser och flaggor är nyckeln till att skapa användarvänliga formulär. Låt oss titta på typiska scenarier och motsvarande InputType-konfigurationer. Varje scenario optimerar inmatning för en specifik datatyp, gör formuläret intuitivt och snabbar upp ifyllning.

ScenarioInputTypeTangentbord
NamntextCapWordsQWERTY, varje ord med versal
EmailtextEmailAddressQWERTY med @ och .
LösenordtextPasswordQWERTY, dold inmatning
TelefonphoneSiffror med +, #, *
PrisnumberDecimalSiffror med komma
KvantitetnumberEndast siffror
KommentartextCapSentences|textMultiLineQWERTY, flerradig
Söktext|textNoSuggestionsQWERTY utan förslag
kotlin
// Kombination för prisfält
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// Kombination för kommentarsfält
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_MULTI_LINE

Programmatiskt arbete med InputType

Att ställa in InputType programmatiskt via setInputType() skriver över det tidigare värdet. Om bara en del av masken behöver ändras (till exempel lägga till en flagga) måste det aktuella värdet sparas, ändras och tillämpas igen. Varje anrop av setInputType() omkonfigurerar EditTexts interna filter.

Metoden setRawInputType() skiljer sig från setInputType genom att den inte orsakar omkonfiguration av filter och förslag. Den används för tillfällig ändring av InputType utan fullständig omladdning av EditText-status. Efter anrop av setInputType() rekommenderas att starta om IME för att uppdatera tangentbordet.

Växla lägen

kotlin
// Växla mellan lösenord och synlig text
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
    }

    // Behåll markörposition
    val cursorPos = editText.selectionStart
    editText.setSelection(cursorPos)
}

Extrahera klass och variation

kotlin
// Hämta inmatningsklass
fun getInputClass(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_CLASS
}

// Hämta inmatningsvariation
fun getInputVariation(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_VARIATION
}

// Kontrollera om lösenordsfält
fun isPasswordField(editText: EditText): Boolean {
    return (editText.inputType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}

Bästa praxis för att välja InputType

Rätt val av InputType handlar inte bara om UX, utan även om säkerhet och datakorrekthet. Huvudrekommendationerna inkluderar: ange alltid explicit InputType för varje EditText; använd den mest specifika inmatningsklassen; kombinera inte flaggor från olika klasser; för fält med känslig data använd PASSWORD-variationer; för sökfält använd imeOptions=„actionSearch”.

InputType påverkar även funktionen hos tillgänglighetstjänster (Accessibility). Fält med typen textPassword får extra skydd från skärmläsare — de läser inte upp inmatade tecken högt. För fält med textEmailAddress informerar skärmläsaren användaren om att fältet är avsett för email och erbjuder lämpliga förslag.

  • Explicithet — ställ alltid in InputType explicit, förlita dig inte på standardvärdet (textMultiLine).
  • Specificitet — använd den mest specifika typen: textEmailAddress, inte text för email.
  • Säkerhet — för lösenord, PIN och kortdata använd PASSWORD-variationer.
  • Automatisk komplettering — kombinera InputType med autofillHints för stöd av lösenordshanterare.
  • Testning — kontrollera beteendet på olika tangentbord (Gboard, SwiftKey, Samsung Keyboard).

Enligt Material Design Guidelines (2025) bör InputType motsvara den typ av data som användaren matar in. Felaktig InputType saktar inte bara ner inmatningen utan kan också leda till fel: till exempel om textMultiLine lämnas kvar för inmatning av telefonnummer, kommer tangentbordet inte att visa det numeriska blocket och användaren måste manuellt ändra layouten varje gång.

Vanliga frågor

Vad är skillnaden mellan InputType och Keyboard Type?

InputType — är ett EditText-attribut som bestämmer typen av inmatade data via en bitmask. Keyboard Type — är det inofficiella namnet för den visuella tangentbordstyp som aktiveras av InputType. InputType påverkar även teckenfiltrering, automatisk korrigering och automatisk komplettering, inte bara tangentbordslayouten.

Hur återställer jag InputType till standardvärdet?

Ställ in editText.inputType = InputType.TYPE_CLASS_TEXT eller använd konstanten InputType.TYPE_NULL (0x00000000) för fullständig återställning. Med TYPE_NULL visas inget tangentbord när fältet fokuseras. För att återgå till standard textinmatning, ställ in TYPE_CLASS_TEXT utan flaggor.

Kan man skapa en anpassad InputType?

Det går inte att skapa en ny InputType-klass eftersom den är en del av Android-ramverket. Du kan dock kombinera befintliga klasser och flaggor för att uppnå önskat beteende. Implementera ytterligare teckenfiltrering via InputFilter, som ställs in på EditText via metoden setFilters().

Hur påverkar InputType IME (tangentbordet)?

InputType skickas till inmatningssystemet via InputConnection. IME läser InputType-klassen och variationen och väljer motsvarande tangentbordslayout. Till exempel får TYPE_CLASS_NUMBER med TYPE_NUMBER_FLAG_DECIMAL tangentbordet att visa ett numeriskt block med komma. De flesta moderna tangentbord följer dessa rekommendationer.

Hur kontrollerar jag InputType vid körning?

Använd egenskapen editText.inputType i Kotlin eller metoden editText.getInputType() i Java. För att extrahera klassen, tillämpa masken: inputType and InputType.TYPE_MASK_CLASS. För att kontrollera en specifik flagga: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — om resultatet != 0 är flaggan inställd.

Sammanfattning

  • InputType — bitmask bestående av inmatningsklass (TEXT, NUMBER, PHONE, DATETIME) och modifierare.
  • Inmatningsklass bestämmer grundläggande datatyp och typ av visat tangentbord.
  • Modifierare specificerar beteende: flerradig, automatisk korrigering, versaler, dold inmatning.
  • Kombinering via bitvis OR möjliggör skapande av exakta konfigurationer för olika scenarier.
  • PASSWORD-variationer inaktiverar automatisk korrigering, döljer tecken och förhindrar ordboksregistrering.
  • Programmatisk inställning via setInputType() kräver omstart av IME för att uppdatera tangentbordet.
  • Bästa praxis — ställ in InputType explicit, använd specifika typer och testa på olika tangentbord.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också