Error State — vad är det, visning av felfält och implementering i Android

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

Error State är ett tillstånd för ett inmatningsfält som visuellt signalerar felaktig data. I Android implementeras Error State via TextInputLayout.setError(), som markerar ramen i rött och visar feltexten under fältet. Enligt Material Design Guidelines, 2026, ska Error State vara märkbar men inte aggressiv: röd ram, feltext, ikon. Korrekt användning av Error State ökar formulärkonverteringen med 20-30%, eftersom användaren snabbt upptäcker och rättar fel utan att förlora kontext.

Huvudpunkter

  • Error State är ett visuellt fälttillstånd som visar användaren att data är felaktig.
  • TextInputLayout.setError() är den primära metoden för att visa fel i Material Design Components.
  • Visuella indikatorer: röd ram, feltext, statusikon, animationsuppträdande.
  • Felåterställning sker automatiskt vid textändring eller manuellt via setError(null).
  • Anpassad Error State används när icke-standardiserad visning krävs: endast ikon, annan färg, fältgrupp.

Vad är felfältsstatus i Android?

Error State är ett speciellt visningsläge för inmatningsfält som aktiveras när inskickad data inte klarar validering. Visuellt innehåller Error State tre komponenter: ändring av fältets ram- eller bakgrundsfärg (vanligtvis röd), uppkomst av ett textmeddelande under fältet med felbeskrivning och valfritt — en ikon eller markering. Syftet med Error State är att omedelbart dra användarens uppmärksamhet till det problematiska fältet och föreslå hur felet ska åtgärdas.

I Android är Error State implementerat på TextInputLayout-nivå från Material Design Components. TextInputLayout omsluter EditText och hanterar dess tillstånd: normal, focused, error, disabled. Metoden setError(String) växlar fältet till feltillstånd, ändrar ramfärg och visar meddelandet. Vid textändring eller anrop av setError(null) återgår fältet till normal.

Enligt Material Design Guidelines ska Error State vara märkbar men inte dominant. Den röda ramfärgen ska kontrastera med normaltillståndet men inte överbelasta gränssnittet. Felmeddelandet ska innehålla specifik information om problemet och hur det löses. Felikonen (t.ex. röd cirkel med utropstecken) förstärker den visuella signalen.

Hur setError fungerar i TextInputLayout

Metoden setError(CharSequence errorText) växlar TextInputLayout till feltillstånd. Parametern errorText är texten som visas under fältet. Om null skickas återställs felet. TextInputLayout hanterar animeringen: feltexten visas med en mjuk övergång, ramen blir röd. Felikonen (som standard ett utropstecken i en cirkel) visas i slutet av fältet.

Viktiga detaljer: setErrorEnabled(true) måste anropas före setError för att reservera utrymme för felmeddelandet. Annars kan layouten hoppa när felet visas eftersom utrymme för meddelandet inte är reserverat. Det rekommenderas att alltid aktivera felstöd i XML via app:errorEnabled="true" för att undvika layoutförskjutning.

Metoden setError återställs automatiskt vid textändring om alternativet setErrorEnabled(true) är aktiverat. Detta beteende är praktiskt för realtidsvalidering: så snart användaren börjar korrigera felet försvinner den röda ramen och fältet återgår till normalt tillstånd. För komplexa scenarier kan denna automatiska återställning dock vara oönskad — hantera felet manuellt i sådana fall.

kotlin
val til = findViewById<TextInputLayout>(R.id.til_email)

// Aktivera felstöd (ange i XML annars)
til.isErrorEnabled = true

// Ange felmeddelande
til.error = "Invalid email address"

// Rensa fel
til.error = null

// Kontrollera om fel finns
if (til.error != null) {
    // Fältet är i felstatus
}

I exemplet används Kotlin-egenskaper för åtkomst till setError/isErrorEnabled. TextInputLayout uppdaterar automatiskt gränssnittet: ändrar boxStrokeColor-färg, visar felikonen, visar feltexten. Om du ändrar text i EditText återställs felet automatiskt. För manuell återställning, ställ in error = null.

Alternativa sätt att visa fel

Alla projekt använder inte Material Design Components. För anpassad felvisning kan du använda en separat TextView under EditText som blir synlig vid fel. Detta tillvägagångssätt ger full kontroll över stilar och meddelandets placering. Du kan till exempel placera meddelandet till höger om fältet, använda en annan bakgrundsfärg eller lägga till en ikon till vänster om texten.

I Jetpack Compose implementeras Error State via parametern isError i OutlinedTextField eller TextField. När isError = true blir ramen röd och du kan visa feltext via supportingText. Compose har ingen inbyggd automatisk rensning vid textändring — utvecklaren hanterar feltillståndet manuellt via remember och mutableStateOf.

För gruppfel (ett meddelande för flera fält, t.ex. \"Fyll i alla obligatoriska fält\") används Snackbar, Dialog eller ett inline-block högst upp i formuläret. Ett gruppfel ersätter inte Error State för enskilda fält utan kompletterar det. Användaren ser först det allmänna meddelandet och söker sedan efter specifika fält med fel.

MetodFördelarNackdelarNär att använda
TextInputLayout.setErrorStandard, animering, automatisk rensningEndast med Material ComponentsPrimärt alternativ för MDC
Separat TextViewFull stilkontrollMåste hantera synlighet manuelltAnpassade teman, utan MDC
Compose isErrorInbyggt i ComposeManuell tillståndshanteringProjekt på Jetpack Compose
Snackbar/DialogGruppmeddelandeInte kopplat till specifikt fältKomplement till fältets Error State

Färger, ikoner och felanimering

Error State-färgen i Material Design Components hanteras via attributet boxStrokeErrorColor eller attributet colorError i temat. Som standard används systemets röda färg, men den kan åsidosättas i appens tema eller direkt i TextInputLayout via app:boxStrokeErrorColor="@color/customErrorColor". För stöd av mörkt tema rekommenderas att använda en väljare med olika färger för ljust och mörkt läge.

Felikonen konfigureras via app:errorIconDrawable. Som standard visas ett utropstecken i en cirkel. Den kan ersättas med en anpassad ikon eller helt tas bort genom att ställa in app:errorIconDrawable="@null". Ikonen visas i slutet av TextInputLayout och fungerar som en extra visuell markör. I Material Design 3 är felikonen obligatorisk för tillgänglighet.

Animering av feluppträdande är inbyggd i TextInputLayout: texten visas från nedre delen med en mjuk opacitetsförändring. För anpassad animering, använd Transition API eller MotionLayout. Till exempel drar skakning av fältet vid fel extra uppmärksamhet. Men överdriven användning av animering försämrar användarupplevelsen — mjuk meddelandeuppträdande är tillräckligt.

Hantera felstatus vid validering

Hantering av Error State är uppdelad i två steg: inställning av fel vid fältvalidering och återställning av fel vid korrigering. I det enklaste fallet anropas validering i TextWatcher.afterTextChanged: om värdet är ogiltigt anropas setError med ett felmeddelande. Om det är giltigt — setError(null). TextInputLayout döljer automatiskt felet när setError(null) återställer tillståndet.

För formulärvalidering ställs fel in vid formulärinskickningssteget. Gå igenom alla fält, kontrollera varje, ställ in fel för ogiltiga fält och fokusera på det första felaktiga fältet. Skickaknappen blockeras under denna tid. Om formuläret är stort rekommenderas att rulla skärmen till det första fältet med fel och automatiskt fokusera på det.

Regeln single error focus: vid formulärinskickning, ställ in fokus endast på det första fältet med fel. Användaren korrigerar ett fel i taget, och efter korrigering får nästa fält med fel automatiskt fokus. Detta steg-för-steg tillvägagångssätt minskar kognitiv belastning. Material TextInputLayout fångar inte fokus vid inställning av fel — detta måste göras manuellt via requestFocus().

Misstag vid arbete med Error State

Första misstaget — saknad isErrorEnabled. Om setErrorEnabled inte anropas före setError kan layouten förskjutas när felmeddelandet visas. Detta är särskilt kritiskt om fältet är mitt på skärmen — användaren förlorar rullningspositionen. Aktivera alltid setErrorEnabled(true) i XML via app:errorEnabled="true" eller programmatiskt före inställning av felet.

Andra misstaget — för långt felmeddelande. Lång text bryts till flera rader och kan täcka angränsande fält. Rekommenderad längd på felmeddelande är 20-40 tecken. Om mer information behövs, använd helperText (tips) i normalt tillstånd eller ett verktygstips för ytterligare förklaring. Korthet är grunden för en bra Error State.

Tredje misstaget — ignorera tillgänglighet. Error State måste vara tillgängligt för skärmläsare. TextInputLayout meddelar automatiskt felet via contentDescription, men anpassade implementeringar måste göra detta manuellt. Använd announceForAccessibility() eller android:importantForAccessibility för felmeddelanden. TalkBack-användare bör höra felet omedelbart efter att det visas.

MisstagProblemLösning
Saknar isErrorEnabledLayoutförskjutning vid felapp:errorEnabled="true" i XML
Långt meddelandeTäcker angränsande fält20-40 tecken, helperText för detaljer
Ingen tillgänglighetSkärmläsare hör inte feletViktigt för TalkBack-användare
Automatisk återställning utan kontrollFältet anses felaktigt giltigtManuell hantering av felåterställning

Vanliga frågor

Hur återställer jag Error State vid korrigering av fel?

Om du använder TextInputLayout, anropa setError(null). Aktivera setErrorEnabled(true) så att utrymmet under meddelandet förblir reserverat men texten försvinner. Vid textändring i EditText återställer TextInputLayout automatiskt felet. För manuell hantering, använd addTextChangedListener och setError(null) vid varje ändring.

Varför förskjuts layouten vid fel?

För att utrymme för felmeddelandet inte är reserverat. Lösning: aktivera app:errorEnabled="true" i XML för TextInputLayout. Detta reserverar utrymme för meddelandet och layouten kommer inte att förskjutas. Om felet inte är aktivt förblir utrymmet tomt, men layouten är stabil.

Hur ändrar jag fel färg i TextInputLayout?

Använd attributet app:boxStrokeErrorColor i XML eller programmatiskt via til.setBoxStrokeErrorStateList(). Färgen kan ställas in med en väljare för olika tillstånd. Du kan också åsidosätta systemattributet colorError i appens tema för att ändra felfärgen globalt för alla fält.

Kan ett fel visas utan att ändra ramfärgen?

Ja, använd app:errorEnabled="true" och setError() — men åsidosätt boxStrokeErrorColor till fältets huvudfärg. Ikonen och feltexten syns fortfarande, men ramen behåller sin ursprungliga färg. Detta minskar dock synligheten av felet, vilket strider mot Material Designs tillgänglighetsrekommendationer.

Hur implementerar jag Error State i Jetpack Compose?

I Compose, använd isError = true i OutlinedTextField eller TextField. Feltext skickas via parametern supportingText. Hantera tillstånd via mutableStateOf. Vid textändring, återställ isError manuellt. Compose har ingen automatisk felrensning, till skillnad från TextInputLayout i View-systemet.

Sammanfattning

  • Error State är ett visuellt fälttillstånd som signalerar fel via röd ram, text och ikon.
  • TextInputLayout.setError() är den primära metoden för Error State-hantering i Material Design Components.
  • isErrorEnabled måste aktiveras för att förhindra layoutförskjutning när ett fel visas.
  • Alternativa metoder: separat TextView för fel, Snackbar för gruppfel, Compose isError.
  • Färg och ikon för fel konfigureras via boxStrokeErrorColor och errorIconDrawable.
  • Tillgänglighet är obligatorisk: skärmläsare måste meddela felet när det visas.
  • Felhantering vid validering: inställning vid ogiltigt värde, återställning vid korrigering eller manuellt.

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å