Keyboard Type — är konfigurationen av det virtuella tangentbordet i Android som bestämmer uppsättningen av visade tecken och layout för ett specifikt inmatningsfält. Android stöder många förinställda typer: text (standard text), number (numeriskt), phone (telefon), email (med @-tecken), textPassword (för lösenord), datetime och andra. Varje typ optimerar inmatningsgränssnittet för en specifik uppgift — till exempel visar e-posttangentbordet @-tecknet och punkten på huvudskärmen. Enligt uppgifter från Android Developers (2026) minskar rätt val av Keyboard Type antalet tryckningar vid inmatning med 20–40% jämfört med standardtexttangentbordet.
Huvudpunkter
Keyboard Type bestäms av värdet på attributet android:inputType i XML eller av det programmatiska anropet setInputType() i kod. InputType är en bitmask där inmatningsklassen (klass) kombineras med modifierarflaggor. Grundläggande klasser: TYPE_CLASS_TEXT för text, TYPE_CLASS_NUMBER för nummer, TYPE_CLASS_PHONE för telefoner, TYPE_CLASS_DATETIME för datum och tid.
Varje Keyboard Type påverkar tre aspekter: layouten av det virtuella tangentbordet (vilka tecken som syns på huvudskärmen), filtrering av inmatade tecken (vilka tecken som är tillåtna) och beteendet för autokorrigering/autokomplettering. Till exempel visar nummertangentbordet endast siffror och decimalavskiljare, och visar inte bokstäver, även om användaren byter läge. Enligt Android Developers Documentation (2026) gör kombinationen av klasser med flaggor det möjligt att skapa mycket specialiserade lägen: flerradig text med autokorrigering, flyttal, lösenord med möjlighet till autokomplettering.
Det är viktigt att förstå att Keyboard Type är en rekommendation till inmatningssystemet (IME). Vissa tangentbord från tredje part (Gboard, SwiftKey) kan delvis ignorera den angivna typen om användaren har konfigurerat egna preferenser. De flesta standard Android-tangentbord och Google Gboard följer dock strikt den angivna inmatningstypen.
// Programmatisk inställning av tangentbordstyp
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT — grundklassen för textinmatning. Aktiverar standard QWERTY-tangentbordet med bokstäver, siffror och symboler. Klassen Text har flest modifierare som preciserar beteendet: TYPE_TEXT_FLAG_CAP_SENTENCES (automatisk stor bokstav i början av mening), TYPE_TEXT_FLAG_AUTO_CORRECT (autokorrigering), TYPE_TEXT_FLAG_MULTI_LINE (flerradsläge), TYPE_TEXT_FLAG_NO_SUGGESTIONS (avaktivering av förslag).
Modifierare för texttangentbordet kan kombineras för att skapa en exakt konfiguration: till exempel är text|textCapSentences|textAutoCorrect lämplig för ett kommentarsfält där automatisk stor bokstav och korrigering av stavfel behövs. Medan text|textNoSuggestions används för inmatning av kod eller speciella termer där autokorrigering kan vara skadlig.
Enligt UX Stack Exchange (2025) snabbar texttangentbord med aktiverad autokorrigering upp inmatningen med 15–25% för genomsnittsanvändaren, men för tekniska termer (kod, URL, e-post) rekommenderas att stänga av autokorrigering eftersom den ofta ersätter korrekta termer med felaktiga.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER aktiverar det numeriska tangentbordet, som endast visar siffror, decimalavskiljare och minustecken. Denna typ används för inmatningsfält för kvantitet, priser, ålder, koder och andra numeriska data. Det numeriska tangentbordet tar mindre plats på skärmen än texttangentbordet och förhindrar oavsiktlig inmatning av bokstäver.
Number har tre modifierare: TYPE_NUMBER_FLAG_DECIMAL lägger till decimalpunkt/komma, TYPE_NUMBER_FLAG_SIGNED lägger till minustecken för negativa tal, TYPE_NUMBER_VARIATION_PASSWORD — för PIN-koder där siffror visas som dolda symboler. Kombinationen number|numberDecimal|numberSigned skapar ett fullvärdigt fält för inmatning av flyttal med valfritt tecken.
// Numerisk inmatning med decimalpunkt
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Kontrollera inmatat nummer
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE aktiverar telefontangentbordet, som visar siffror och symboler som är karakteristiska för telefonnummer: +, #, *, (, ). Till skillnad från nummertangentbordet visar phone även bokstavslayout i ett extra läge, eftersom telefonnummer kan innehålla bokstäver (till exempel 1-800-FLOWERS). Klassen phone har inga extra flaggor men stöder TYPE_TEXT_VARIATION_PHONE_ETC för inmatning av anknytningar.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS aktiverar e-posttangentbordet, där @-tecknet och punkten finns på huvudskärmen, och vanliga domäntillägg (.com, .net, .org) är också tillgängliga. Gboard visar dessutom knappar med populära domäner vid inmatning efter @. E-posttangentbordet stänger automatiskt av autokorrigering eftersom e-postadresser kan innehålla icke-standardiserade teckenkombinationer.
Enligt Google Material Design Guidelines (2025) rekommenderas att för telefonfält även ange attributet android:digits, som begränsar uppsättningen tillåtna tecken. För e-postfält är det också viktigt att ange autofillHints="email" för stöd av autokomplettering från lösenordshanteraren och 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 och TYPE_NUMBER_VARIATION_PASSWORD — är inmatningslägen för konfidentiell data. Vid inställning av textPassword visas inmatade tecken som punkter eller asterisker (beroende på Android-version och tangentbord). Tangentbordet i detta läge stänger av autokorrigering och sparande av inmatade ord i användarens ordbok, vilket förhindrar lösenordsläckage genom prediktiva inmatningsfunktioner.
Password tangentbordet stänger även av möjligheten att ta skärmdump av fältinnehållet (flaggan FLAG_SECURE), även om detta beteende beror på implementeringen av det specifika tangentbordet. Från och med Android 8.0 (API 26) stöder lösenordstangentbord autokomplettering via lösenordshanterare om attributet importantForAutofill="yes" är inställt.
Enligt Android Security Recommendations (2025) rekommenderas för lösenordsfält även: att ställa in maxLength för att förhindra mycket långa lösenord (som kan vara en attack mot databasen), att använda inputType="textPassword" tillsammans med TextInputLayout och endIconMode="password_toggle" så att användaren kan kontrollera det inmatade lösenordet innan formuläret skickas.
<!-- 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>
Programmatisk konfiguration av Keyboard Type gör det möjligt att dynamiskt ändra tangentbordsläge beroende på sammanhang eller användarinmatning. Till exempel vid växling av fälttyp (text/nummer/datum) eller vid ändring av locale. Metoden setInputType() accepterar en bitmask InputType och uppdaterar omedelbart tangentbordet om fältet är i fokus.
// Växla mellan text och numerisk inmatning
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)
}
// Kontrollera om fältet är numeriskt
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Kontrollera om autokorrigering är aktiverad
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
Vanliga frågor
Om inputType inte har angetts använder EditText som standard TYPE_CLASS_TEXT med flaggan TYPE_TEXT_FLAG_MULTI_LINE. Detta innebär standard QWERTY-tangentbord och flerradsinmatning. För de flesta fält rekommenderas att explicit ange inputType för att säkerställa korrekt tangentbordsbeteende och teckenfiltrering.
Använd attributet android:imeOptions="actionDone" på EditText. Detta kommer att ersätta Enter-knappen med en Done-knapp. Andra alternativ: actionSearch (förstoringsglas), actionNext (högerpil), actionSend (skicka). Implementera tryckhanteringen via OnEditorActionListener i koden.
Det går inte att stänga av vibration för ett specifikt fält — detta är en systeminställning som hanteras av användaren i tangentbordsinställningarna. Du kan dock helt förhindra att tangentbordet visas genom att ställa in attributet android:focusable="false" på EditText eller avbryta visningen via dispatchTouchEvent.
Ställ in android:inputType="none" eller anropa programmatiskt editText.setKeyListener(null). Fältet kommer att visa text, men tangentbordet visas inte vid fokus. Användaren kan markera och kopiera text, men inte ändra den. Alternativ — använd TextView med textIsSelectable="true".
Efter anrop av setInputType() måste du visa tangentbordet igen, eftersom systemet kanske inte uppdaterar IME automatiskt. Anropa InputMethodManager.restartInput(view) för tvingad uppdatering. Om fältet inte är i fokus, anropa först requestFocus(), sedan restartInput.
Sammanfattning
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.
Läs också