EditText — är en grundläggande Android-komponent avsedd för inmatning och redigering av text i användargränssnittet. Den ärver från TextView och ger möjlighet att mata in tecken från ett virtuellt eller fysiskt tangentbord. EditText stöder flera lägen: en- och flerradig text, lösenord, nummer, e-postadresser och telefonnummer. Enligt Android Developers (2026) används EditText i mer än 90% av Android-applikationer för att skapa formulär, sökfält, chattar och datainmatningsskärmar.
Huvudpunkter
EditText — är en klass från paketet android.widget som implementerar ett interaktivt textfält för datainmatning av användaren. I arvshierarkin Android EditText extends TextView, så den ärver alla egenskaper hos en textetikett, inklusive hantering av typsnitt, färger och justering. Huvudskillnaden mellan EditText och TextView är möjligheten att redigera innehåll — användaren kan mata in, ta bort och ändra text direkt i gränssnittet.
Varje EditText är kopplad till en Editable-instans som lagrar den inmatade texten och stöder operationer för insättning, borttagning och ersättning av tecken. Vid textinmatning hanterar EditText automatiskt markörposition, textmarkering och ändringshistorik för ångra (undo/redo). Enligt Android Developers Guide (2026) stöder EditText också automatisk komplettering via klassen AutoCompleteTextView som ärver från EditText.
Arkitekturen för EditText är byggd på separation av modell (Editable), vy (TextView) och kontroller (InputConnection). När den får fokus skapar EditText en InputConnection genom vilken inmatningssystemet överför tecken, tangenttryckningar och redigeringskommandon. Denna mekanism säkerställer kompatibilitet med alla inmatningsmetoder — från virtuella tangentbord till fysiska Bluetooth-tangentbord och röstinmatning.
val editText = EditText(context).apply {
hint = "Ange text"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText erbjuder dussintals attribut för finjustering av beteende och utseende. De kan ställas in både i XML-layouten och programmatiskt via Kotlin eller Java. Attributen är indelade i kategorier: texthantering, begränsningar, visuellt utseende och interaktion med tangentbordet.
| Attribut | Beskrivning | Exempelvärde |
|---|---|---|
| android:hint | Ledtext som visas i tomt fält | “Ange e-post” |
| android:inputType | Inmatningsläge (text, nummer, lösenord etc.) | textEmailAddress |
| android:maxLines | Maximalt antal rader | 3 |
| android:maxLength | Maximal textlängd i tecken | 100 |
| android:textColorHint | Färg på ledtexten | #999999 |
Attributet android:hint är ett av de viktigaste — det informerar användaren om vilka data som förväntas i fältet. När text matas in försvinner hint automatiskt. Hint deltar inte i formulärsändning och sparas inte som fältvärde. Material Design rekommenderar att använda TextInputLayout med flytande etikett istället för vanlig hint för ett modernare utseende.
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
Attributet inputType bestämmer vilken typ av tangentbord som ska visas för användaren och vilka tecken som är tillåtna för inmatning. Det är en bitmask där inmatningsklassen (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) kombineras med modifierare.
Varje inmatningsläge ändrar inte bara tangentbordslayouten utan påverkar också textbearbetningen: i numeriskt läge är endast siffror och decimalkomma tillåtna, i e-postläge är @-symbolen och domäntillägg tillgängliga, i telefonläge visas siffror och symbolerna +, #, *. Rätt val av inputType har en kritisk inverkan på användarupplevelsen — ett olämpligt tangentbord tvingar användaren att växla lägen, vilket ökar formulärets ifyllnadstid med 30–50%.
Enligt Material Design Guidelines (2025) rekommenderas att använda den mest specifika inputType för varje fält: textPassword för lösenord, numberDecimal för priser, phone för telefonnummer, textMultiLine för flerradig inmatning. Detta påskyndar formulärifyllning och minskar antalet inmatningsfel.
// Programmatisk inputType-inställning
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher — är ett gränssnitt för att spåra textändringar i EditText i realtid. Det innehåller tre metoder: beforeTextChanged anropas före ändringen, onTextChanged — under ändringen, afterTextChanged — efter att textändringen slutförts. TextWatcher används för inmatningsvalidering, teckenräkning, sökning och automatisk komplettering.
OnEditorActionListener hanterar användarens åtgärder på tangentbordet: tryck på Done-knappen (IME_ACTION_DONE), sökning (IME_ACTION_SEARCH), sändning (IME_ACTION_SEND), övergång till nästa fält (IME_ACTION_NEXT) och andra. Denna avlyssnare är särskilt användbar för att organisera navigering i formulär — vid tryck på Next flyttas fokus automatiskt till nästa fält, och vid tryck på Done döljs tangentbordet och sändning utförs.
Enligt Android Developers Blog (2025) möjliggör korrekt användning av OnEditorActionListener med attributet android:imeOptions att skapa intuitiva formulär utan extra sändningsknappar — användaren fyller i fälten och trycker på Done på tangentbordet, vilket utlöser sparande eller sökning.
// TextWatcher för e-postvalidering
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// OnEditorActionListener för formulärsändning
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Låt oss titta på ett komplett exempel på att skapa en inloggningsskärm med EditText för inmatning av e-post och lösenord. I detta exempel visas konfiguration av inputType, validering via TextWatcher och hantering av inloggningsknappen.
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText stöder anpassning via XML-attribut, teman och stilar. Textfärg, ledtextfärg, understrykningsfärg (backgroundTint), teckensnittsstil, textstorlek och mycket mer kan ändras. Material Components tillhandahåller temat MaterialComponents. EditText med anpassade attribut, inklusive boxStrokeColor, boxBackgroundColor och endIconMode.
För att ändra understrykningsfärgen för EditText används attributet android:backgroundTint, som ställer in färgen för standardtillståndet och fokustillståndet. I Material Design hanteras understrykningsfärgen via temats colorPrimary. För fullständig anpassning kan en egen drawable skapas som bakgrund i mappen res/drawable.
| Stil | Attribut | Resultat |
|---|---|---|
| Textfärg | android:textColor | Ändrar färg på inmatad text |
| Hintfärg | android:textColorHint | Ändrar färg på ledtexten |
| Understrykning | android:backgroundTint | Ändrar färg på linjen under fältet |
| Teckenstorlek | android:textSize | Ställer in textstorlek i sp |
| Teckensnitt | android:fontFamily | Ansluter anpassat teckensnitt |
För att skapa en enhetlig stil för alla EditText i applikationen rekommenderas att definiera en global stil i temat. Material Design erbjuder stilen Widget.MaterialComponents.TextInputLayout.OutlinedBox som automatiskt tillämpas på alla inmatningsfält som använder TextInputLayout. Detta säkerställer ett konsekvent utseende utan att duplicera attribut i varje layout.
Vanliga frågor
EditText ärver från TextView och lägger till möjligheten att redigera text. TextView visar bara text medan EditText tillåter användaren att mata in, ta bort och ändra innehåll. EditText stöder också inputType, TextWatcher, markörhantering och andra funktioner relaterade till datainmatning.
Använd InputFilter — ett gränssnitt för att filtrera inmatade tecken. EditText stöder inställning av en array av filter via metoden setFilters(). Till exempel begränsar InputFilter.LengthFilter textlängden, och en anpassad InputFilter kan förbjuda vissa tecken, reguljära uttryck eller Unicode-intervall.
Anropa metoden editText.text.toString() i Kotlin eller editText.getText().toString() i Java. Egenskapen text returnerar en Editable som konverteras till String via toString(). Det är viktigt att kontrollera texten för null och tomhet före användning, särskilt i formulär med obligatoriska fält.
Ställ in attributet android:inputType="textMultiLine" eller lägg till flaggan InputType.TYPE_TEXT_FLAG_MULTI_LINE programmatiskt. I flerradigt läge tillåter EditText radbrytning med Enter och ökar automatiskt i höjd. För att begränsa höjden, använd android:maxLines eller android:minLines.
Ställ in attributet android:enabled="false" eller anropa editText.isEnabled = false i kod. Inaktiverad EditText reagerar inte på beröring, får inte fokus och visas i grått (disabled state). Ett alternativ är att använda android:focusable="false", som inaktiverar inmatning men behåller normalt utseende.
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å