Error State — apa itu, menampilkan kesalahan bidang dan implementasi di Android

Penulis: IT Sectr Diterbitkan: 2026-07-09 Waktu membaca: 5 mnt

Error State adalah status bidang input yang secara visual memberi sinyal data yang tidak valid. Di Android, Error State diimplementasikan melalui TextInputLayout.setError(), yang menyorot bingkai dengan warna merah dan menampilkan teks kesalahan di bawah bidang. Menurut Material Design Guidelines, 2026, Error State harus terlihat tetapi tidak agresif: bingkai merah, teks kesalahan, ikon. Penggunaan Error State yang benar meningkatkan konversi formulir sebesar 20-30%, karena pengguna dengan cepat menemukan dan memperbaiki kesalahan tanpa kehilangan konteks.

Poin Utama

  • Error State — status visual bidang yang menunjukkan bahwa data tidak valid.
  • TextInputLayout.setError() — metode utama untuk menampilkan kesalahan di Material Design Components.
  • Indikator visual: bingkai merah, teks kesalahan, ikon status, animasi kemunculan.
  • Reset kesalahan terjadi secara otomatis saat teks berubah atau secara manual melalui setError(null).
  • Error State kustom digunakan ketika tampilan non-standar diperlukan: hanya ikon, warna lain, grup bidang.

Apa itu status kesalahan bidang di Android?

Error State adalah mode tampilan khusus bidang input yang diaktifkan ketika data yang dimasukkan tidak lolos validasi. Secara visual, Error State mencakup tiga komponen: perubahan warna garis tepi atau latar belakang bidang (biasanya merah), munculnya pesan teks di bawah bidang dengan deskripsi kesalahan, dan secara opsional — ikon atau penyorotan. Tujuan Error State adalah untuk segera menarik perhatian pengguna ke bidang yang bermasalah dan memberikan petunjuk cara memperbaiki kesalahan.

Di Android, Error State diimplementasikan di tingkat TextInputLayout dari Material Design Components. TextInputLayout membungkus EditText dan mengelola statusnya: normal, focused, error, disabled. Metode setError(String) mengalihkan bidang ke status kesalahan, mengubah warna bingkai, dan menampilkan pesan. Saat teks berubah atau setError(null) dipanggil, bidang kembali ke normal.

Menurut Material Design Guidelines, Error State harus terlihat tetapi tidak dominan. Warna merah bingkai harus kontras dengan status normal, tetapi tidak membebani antarmuka. Pesan kesalahan harus berisi informasi spesifik tentang masalah dan cara mengatasinya. Ikon kesalahan (misalnya lingkaran merah dengan tanda seru) memperkuat sinyal visual.

Bagaimana cara kerja setError di TextInputLayout

Metode setError(CharSequence errorText) mengalihkan TextInputLayout ke status kesalahan. Parameter errorText adalah teks yang ditampilkan di bawah bidang. Jika null dikirimkan, kesalahan direset. TextInputLayout mengelola animasi: teks kesalahan muncul dengan transisi halus, bingkai berubah menjadi merah. Ikon kesalahan (secara default tanda seru dalam lingkaran) ditampilkan di akhir bidang.

Detail penting: setErrorEnabled(true) harus dipanggil sebelum setError untuk mereservasi ruang bagi pesan kesalahan. Jika tidak, saat kesalahan muncul, tata letak mungkin melompat karena ruang untuk pesan tidak disediakan. Disarankan untuk selalu mengaktifkan dukungan kesalahan di XML melalui app:errorEnabled="true" untuk menghindari pergeseran tata letak.

Metode setError secara otomatis direset saat teks bidang berubah jika opsi setErrorEnabled(true) diaktifkan. Perilaku ini berguna untuk validasi waktu nyata: segera setelah pengguna mulai memperbaiki kesalahan, bingkai merah menghilang dan bidang kembali ke status normal. Namun untuk skenario kompleks, pengaturan ulang otomatis ini mungkin tidak diinginkan — dalam kasus seperti itu, kelola kesalahan secara manual.

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

// Aktifkan dukungan kesalahan (atur di XML jika tidak)
til.isErrorEnabled = true

// Atur pesan kesalahan
til.error = "Invalid email address"

// Hapus kesalahan
til.error = null

// Periksa apakah kesalahan ada
if (til.error != null) {
    // Bidang dalam status kesalahan
}

Dalam contoh ini, properti Kotlin digunakan untuk mengakses setError/isErrorEnabled. TextInputLayout secara otomatis memperbarui UI: mengubah warna boxStrokeColor, menampilkan ikon kesalahan, menampilkan teks kesalahan. Jika Anda mengubah teks di EditText, kesalahan akan direset secara otomatis. Untuk pengaturan ulang manual, tetapkan error = null.

Cara alternatif menampilkan kesalahan

Tidak semua proyek menggunakan Material Design Components. Untuk tampilan kustom kesalahan, Anda dapat menggunakan TextView terpisah di bawah EditText yang menjadi terlihat saat terjadi kesalahan. Pendekatan ini memberikan kontrol penuh atas gaya dan posisi pesan. Misalnya, Anda dapat menempatkan pesan di sebelah kanan bidang, menggunakan warna latar belakang yang berbeda, atau menambahkan ikon di sebelah kiri teks.

Di Jetpack Compose, Error State diimplementasikan melalui parameter isError di OutlinedTextField atau TextField. Saat isError = true, bingkai menjadi merah dan Anda dapat menampilkan teks kesalahan melalui supportingText. Compose tidak memiliki penghapusan otomatis saat teks berubah — pengembang mengelola status kesalahan secara manual melalui remember dan mutableStateOf.

Untuk kesalahan grup (satu pesan untuk beberapa bidang, misalnya “Isi semua bidang wajib”) digunakan Snackbar, Dialog, atau blok inline di bagian atas formulir. Kesalahan grup tidak menggantikan Error State bidang individu, tetapi melengkapinya. Pengguna pertama-tama melihat pesan umum, kemudian mencari bidang spesifik dengan kesalahan.

CaraKelebihanKekuranganKapan digunakan
TextInputLayout.setErrorStandar, animasi, hapus otomatisHanya dengan Material ComponentsOpsi utama untuk MDC
TextView terpisahKontrol penuh atas gayaPerlu mengelola visibilitas manualTema kustom, tanpa MDC
Compose isErrorBawaan ComposeManajemen status manualProyek Jetpack Compose
Snackbar/DialogPesan grupTidak terikat ke bidang tertentuPelengkap Error State bidang

Warna, ikon, dan animasi kesalahan

Warna Error State di Material Design Components dikelola melalui atribut boxStrokeErrorColor atau atribut colorError di tema. Secara default, warna merah sistem digunakan, tetapi dapat diganti di tema aplikasi atau langsung di TextInputLayout melalui app:boxStrokeErrorColor="@color/customErrorColor". Untuk dukungan tema gelap, disarankan menggunakan pemilih dengan warna berbeda untuk mode terang dan gelap.

Ikon kesalahan dikonfigurasi melalui app:errorIconDrawable. Secara default, tanda seru dalam lingkaran ditampilkan. Dapat diganti dengan ikon kustom atau dihapus sepenuhnya dengan mengatur app:errorIconDrawable="@null". Ikon ditampilkan di akhir TextInputLayout dan berfungsi sebagai penanda visual tambahan. Di Material Design 3, ikon kesalahan wajib untuk aksesibilitas.

Animasi kemunculan kesalahan tertanam di TextInputLayout: teks muncul dari bawah dengan perubahan opacity bertahap. Untuk animasi kustom, gunakan Transition API atau MotionLayout. Misalnya, goyangan bidang saat kesalahan menarik perhatian tambahan. Namun penyalahgunaan animasi memperburuk UX — kemunculan pesan yang halus sudah cukup.

Mengelola status kesalahan saat validasi

Pengelolaan Error State terbagi menjadi dua tahap: mengatur kesalahan saat validasi bidang dan mereset kesalahan saat perbaikan. Dalam kasus paling sederhana, validasi dipanggil di TextWatcher.afterTextChanged: jika nilai tidak valid, setError dipanggil dengan pesan kesalahan. Jika valid — setError(null). TextInputLayout secara otomatis menyembunyikan kesalahan saat setError(null) mereset status.

Untuk validasi formulir, kesalahan diatur pada tahap pengiriman formulir. Melakukan iterasi semua bidang, memeriksa masing-masing, mengatur kesalahan untuk bidang yang tidak valid, dan fokus pada bidang pertama yang salah. Tombol kirim diblokir saat ini. Jika formulir besar, disarankan untuk menggulir layar ke bidang pertama dengan kesalahan dan secara otomatis memberikan fokus padanya.

Aturan single error focus: saat mengirim formulir, atur fokus hanya pada bidang pertama dengan kesalahan. Pengguna memperbaiki satu kesalahan dalam satu waktu, dan setelah perbaikan, bidang berikutnya dengan kesalahan secara otomatis mendapatkan fokus. Pendekatan langkah demi langkah ini mengurangi beban kognitif. Material TextInputLayout tidak mengambil fokus saat mengatur kesalahan — ini harus dilakukan secara manual melalui requestFocus().

Kesalahan saat bekerja dengan Error State

Kesalahan pertama — tidak ada isErrorEnabled. Jika setErrorEnabled tidak dipanggil sebelum setError, tata letak dapat bergeser saat pesan kesalahan muncul. Hal ini sangat kritis jika bidang berada di tengah layar — pengguna kehilangan posisi gulir. Selalu aktifkan setErrorEnabled(true) di XML melalui app:errorEnabled="true" atau secara terprogram sebelum mengatur kesalahan.

Kesalahan kedua — pesan kesalahan terlalu panjang. Teks panjang terbagi menjadi beberapa baris dan dapat menutupi bidang yang berdekatan. Panjang pesan kesalahan yang disarankan adalah 20-40 karakter. Jika diperlukan informasi lebih lanjut, gunakan helperText (petunjuk) dalam status normal atau tooltip untuk penjelasan tambahan. Singkatnya adalah dasar Error State yang baik.

Kesalahan ketiga — mengabaikan aksesibilitas. Error State harus dapat diakses oleh pembaca layar. TextInputLayout secara otomatis mengumumkan kesalahan melalui contentDescription, tetapi implementasi kustom harus melakukannya secara manual. Gunakan announceForAccessibility() atau android:importantForAccessibility untuk pesan kesalahan. Pengguna TalkBack harus mendengar kesalahan segera setelah muncul.

KesalahanMasalahSolusi
Tidak ada isErrorEnabledPergeseran tata letak saat kesalahanapp:errorEnabled="true" di XML
Pesan panjangMenutupi bidang yang berdekatan20-40 karakter, helperText untuk detail
Tidak ada aksesibilitasPembaca layar tidak mendengar kesalahanPenting untuk pengguna TalkBack
Reset otomatis tanpa pemeriksaanBidang dianggap valid secara keliruManajemen reset kesalahan manual

Pertanyaan yang Sering Diajukan

Bagaimana cara mereset Error State saat memperbaiki kesalahan?

Jika Anda menggunakan TextInputLayout, panggil setError(null). Aktifkan setErrorEnabled(true) agar ruang di bawah pesan tetap tersedia, tetapi teks menghilang. Saat teks di EditText berubah, TextInputLayout secara otomatis mereset kesalahan. Untuk pengelolaan manual, gunakan addTextChangedListener dan setError(null) pada setiap perubahan.

Mengapa tata letak bergeser saat terjadi kesalahan?

Karena ruang untuk pesan kesalahan tidak disediakan. Solusi: aktifkan app:errorEnabled="true" di XML untuk TextInputLayout. Ini akan menyediakan ruang untuk pesan dan tata letak tidak akan bergeser. Jika kesalahan tidak aktif, ruang tetap kosong, tetapi tata letak stabil.

Bagaimana cara mengubah warna kesalahan di TextInputLayout?

Gunakan atribut app:boxStrokeErrorColor di XML atau secara terprogram melalui til.setBoxStrokeErrorStateList(). Warna dapat diatur dengan pemilih untuk berbagai status. Anda juga dapat mengganti atribut sistem colorError di tema aplikasi untuk mengubah warna kesalahan secara global untuk semua bidang.

Bisakah kesalahan ditampilkan tanpa mengubah warna bingkai?

Ya, gunakan app:errorEnabled="true" dan setError() — tetapi ganti boxStrokeErrorColor dengan warna utama bidang. Ikon dan teks kesalahan tetap terlihat, tetapi bingkai mempertahankan warna asli. Namun ini mengurangi visibilitas kesalahan, yang bertentangan dengan rekomendasi Material Design untuk aksesibilitas.

Bagaimana cara mengimplementasikan Error State di Jetpack Compose?

Di Compose, gunakan isError = true di OutlinedTextField atau TextField. Teks kesalahan diteruskan melalui parameter supportingText. Kelola status melalui mutableStateOf. Saat teks berubah, reset isError secara manual. Compose tidak memiliki penghapusan kesalahan otomatis, tidak seperti TextInputLayout di sistem View.

Ringkasan

  • Error State — status visual bidang yang menandakan kesalahan melalui bingkai merah, teks, dan ikon.
  • TextInputLayout.setError() — metode utama untuk mengelola Error State di Material Design Components.
  • isErrorEnabled harus diaktifkan untuk mencegah pergeseran tata letak saat kesalahan muncul.
  • Cara alternatif: TextView terpisah untuk kesalahan, Snackbar untuk kesalahan grup, Compose isError.
  • Warna dan ikon kesalahan dikonfigurasi melalui boxStrokeErrorColor dan errorIconDrawable.
  • Aksesibilitas wajib: pembaca layar harus mengumumkan kesalahan saat muncul.
  • Manajemen kesalahan saat validasi: mengatur saat nilai tidak valid, mereset saat perbaikan atau manual.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga