EditText — adalah komponen dasar Android yang dirancang untuk memasukkan dan mengedit teks di antarmuka pengguna. Komponen ini mewarisi dari TextView dan menyediakan kemampuan memasukkan karakter dari keyboard virtual atau fisik. EditText mendukung banyak mode: teks satu baris dan multi-baris, kata sandi, angka, alamat email, dan nomor telepon. Menurut Android Developers (2026), EditText digunakan di lebih dari 90% aplikasi Android untuk membuat formulir, kolom pencarian, obrolan, dan layar input data.
Poin utama
EditText — adalah kelas dari paket android.widget yang mengimplementasikan kolom teks interaktif untuk input data oleh pengguna. Dalam hierarki pewarisan Android EditText extends TextView, sehingga mewarisi semua properti label teks, termasuk manajemen font, warna, dan perataan. Perbedaan utama antara EditText dan TextView terletak pada kemampuan mengedit konten — pengguna dapat memasukkan, menghapus, dan mengubah teks langsung di antarmuka.
Setiap EditText terhubung dengan instance Editable yang menyimpan teks yang dimasukkan dan mendukung operasi penyisipan, penghapusan, dan penggantian karakter. Saat memasukkan teks, EditText secara otomatis mengelola posisi kursor, pemilihan teks, dan riwayat perubahan untuk undo/redo. Menurut Android Developers Guide (2026), EditText juga mendukung pelengkapan otomatis melalui kelas AutoCompleteTextView yang mewarisi dari EditText.
Arsitektur EditText dibangun di atas pemisahan model (Editable), tampilan (TextView), dan pengontrol (InputConnection). Saat menerima fokus, EditText membuat InputConnection yang melaluinya sistem input mengirimkan karakter, penekanan tombol, dan perintah pengeditan. Mekanisme ini memastikan kompatibilitas dengan metode input apa pun — dari keyboard virtual hingga keyboard fisik Bluetooth dan input suara.
val editText = EditText(context).apply {
hint = "Masukkan teks"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText menyediakan puluhan atribut untuk penyesuaian perilaku dan tampilan yang presisi. Atribut-atribut ini dapat diatur baik di tata letak XML maupun secara pemrograman melalui Kotlin atau Java. Atribut dibagi menjadi beberapa kategori: manajemen teks, batasan, tampilan visual, dan interaksi dengan keyboard.
| Atribut | Deskripsi | Contoh nilai |
|---|---|---|
| android:hint | Teks petunjuk yang ditampilkan di kolom kosong | „Masukkan email" |
| android:inputType | Mode input (teks, angka, kata sandi, dll.) | textEmailAddress |
| android:maxLines | Jumlah baris maksimum | 3 |
| android:maxLength | Panjang maksimum teks dalam karakter | 100 |
| android:textColorHint | Warna teks petunjuk | #999999 |
Atribut android:hint adalah salah satu yang terpenting — memberi tahu pengguna data apa yang diharapkan di kolom. Saat memasukkan teks, hint secara otomatis menghilang. Hint tidak berpartisipasi dalam pengiriman formulir dan tidak disimpan sebagai nilai kolom. Material Design merekomendasikan penggunaan TextInputLayout dengan label mengambang sebagai pengganti hint biasa untuk tampilan yang lebih modern.
<!-- 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" />
Atribut inputType menentukan jenis keyboard apa yang akan ditampilkan kepada pengguna dan karakter apa yang diizinkan untuk dimasukkan. Ini adalah mask bit di mana kelas input (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) digabungkan dengan pengubah.
Setiap mode input tidak hanya mengubah tata letak keyboard, tetapi juga memengaruhi pemrosesan teks: dalam mode numerik hanya angka dan pemisah desimal yang diizinkan, dalam mode email simbol @ dan ekstensi domain tersedia, dan dalam mode telepon angka serta simbol +, #, * ditampilkan. Pemilihan inputType yang tepat sangat memengaruhi pengalaman pengguna — keyboard yang tidak sesuai memaksa pengguna untuk mengganti mode, yang meningkatkan waktu pengisian formulir sebesar 30–50%.
Menurut Material Design Guidelines (2025), disarankan untuk menggunakan inputType yang paling spesifik untuk setiap kolom: textPassword untuk kata sandi, numberDecimal untuk harga, phone untuk nomor telepon, textMultiLine untuk input multi-baris. Ini mempercepat pengisian formulir dan mengurangi jumlah kesalahan input.
// Pengaturan inputType secara pemrograman
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher — adalah antarmuka untuk melacak perubahan teks di EditText secara waktu nyata. Ini berisi tiga metode: beforeTextChanged dipanggil sebelum perubahan, onTextChanged — selama perubahan, afterTextChanged — setelah perubahan teks selesai. TextWatcher digunakan untuk validasi input, penghitungan karakter, pencarian, dan pelengkapan otomatis.
OnEditorActionListener menangani tindakan pengguna pada keyboard: menekan tombol Done (IME_ACTION_DONE), pencarian (IME_ACTION_SEARCH), pengiriman (IME_ACTION_SEND), berpindah ke kolom berikutnya (IME_ACTION_NEXT) dan lainnya. Listener ini sangat berguna untuk mengatur navigasi formulir — saat menekan Next, fokus secara otomatis berpindah ke kolom berikutnya, dan saat menekan Done, keyboard disembunyikan dan pengiriman dilakukan.
Menurut Android Developers Blog (2025), penggunaan OnEditorActionListener yang benar dengan atribut android:imeOptions memungkinkan pembuatan formulir intuitif tanpa tombol pengiriman tambahan — pengguna mengisi kolom dan menekan Done pada keyboard, yang memicu penyimpanan atau pencarian.
// TextWatcher untuk validasi email
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 untuk pengiriman formulir
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Mari kita lihat contoh lengkap pembuatan layar login menggunakan EditText untuk memasukkan email dan kata sandi. Dalam contoh ini, konfigurasi inputType, validasi melalui TextWatcher, dan penanganan penekanan tombol login ditunjukkan.
@+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 mendukung kustomisasi melalui atribut XML, tema, dan gaya. Warna teks, warna petunjuk, warna garis bawah (backgroundTint), gaya font, ukuran teks, dan banyak lagi dapat diubah. Material Components menyediakan tema MaterialComponents. EditText dengan atribut kustom, termasuk boxStrokeColor, boxBackgroundColor, dan endIconMode.
Untuk mengubah warna garis bawah EditText digunakan atribut android:backgroundTint, yang mengatur warna untuk status default dan status fokus. Di Material Design, warna garis bawah dikelola melalui colorPrimary tema. Untuk kustomisasi penuh, dapat dibuat drawable khusus untuk latar belakang di folder res/drawable.
| Gaya | Atribut | Hasil |
|---|---|---|
| Warna teks | android:textColor | Mengubah warna teks yang dimasukkan |
| Warna hint | android:textColorHint | Mengubah warna teks petunjuk |
| Garis bawah | android:backgroundTint | Mengubah warna garis di bawah kolom |
| Ukuran font | android:textSize | Mengatur ukuran teks dalam sp |
| Font | android:fontFamily | Menghubungkan font kustom |
Untuk membuat gaya seragam semua EditText di aplikasi, disarankan untuk mendefinisikan gaya global di tema. Material Design menawarkan gaya Widget.MaterialComponents.TextInputLayout.OutlinedBox yang secara otomatis diterapkan ke semua kolom input yang menggunakan TextInputLayout. Ini memastikan tampilan yang konsisten tanpa menduplikasi atribut di setiap tata letak.
Pertanyaan yang sering diajukan
EditText mewarisi dari TextView dan menambahkan kemampuan mengedit teks. TextView hanya menampilkan teks, sedangkan EditText memungkinkan pengguna untuk memasukkan, menghapus, dan mengubah konten. EditText juga mendukung inputType, TextWatcher, manajemen kursor, dan fungsi lain yang terkait dengan input data.
Gunakan InputFilter — antarmuka untuk memfilter karakter yang dimasukkan. EditText mendukung pengaturan array filter melalui metode setFilters(). Misalnya, InputFilter.LengthFilter membatasi panjang teks, dan InputFilter kustom dapat melarang karakter tertentu, ekspresi reguler, atau rentang Unicode.
Panggil metode editText.text.toString() di Kotlin atau editText.getText().toString() di Java. Properti text mengembalikan Editable yang dikonversi menjadi String melalui toString(). Penting untuk memeriksa teks terhadap null dan kekosongan sebelum digunakan, terutama di formulir dengan kolom wajib.
Atur atribut android:inputType="textMultiLine" atau tambahkan secara pemrograman bendera InputType.TYPE_TEXT_FLAG_MULTI_LINE. Dalam mode multi-baris, EditText memungkinkan pemutusan baris dengan Enter dan secara otomatis bertambah tinggi. Untuk membatasi tinggi, gunakan android:maxLines atau android:minLines.
Atur atribut android:enabled="false" atau panggil editText.isEnabled = false di kode. EditText yang dinonaktifkan tidak merespons sentuhan, tidak menerima fokus, dan ditampilkan dalam warna abu-abu (disabled state). Alternatifnya adalah menggunakan android:focusable="false", yang menonaktifkan input tetapi mempertahankan tampilan normal.
Ringkasan
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.
Baca juga