InputType — adalah atribut Android yang menentukan karakter data yang dimasukkan dan perilaku keyboard untuk kolom teks. Nilai InputType mewakili mask bit yang menggabungkan kelas input (teks, angka, telepon, tanggal) dan pengubah (multi-baris, koreksi otomatis, huruf kapital, input tersembunyi). InputType memengaruhi jenis keyboard yang ditampilkan, penyaringan karakter yang dimasukkan, dan kerja pelengkapan otomatis. Menurut Android Developers (2026), InputType adalah salah satu atribut terpenting untuk memastikan input data yang benar dan harus ditetapkan secara eksplisit untuk setiap kolom teks yang dapat diedit.
Poin utama
InputType — adalah konstanta bilangan bulat (Int) yang mengodekan mode input untuk kolom teks. Di Android, ini didefinisikan dalam kelas android.text.InputType. Nilai InputType terdiri dari dua bagian: kelas input (bit 0–4) dan pengubah (bit 5–31). Kelas input menentukan tipe dasar data — teks, angka, telepon, tanggal. Pengubah merinci perilaku dalam kelas yang dipilih — misalnya, untuk kelas teks, koreksi otomatis, huruf kapital, atau input multi-baris dapat diaktifkan.
Mekanisme InputType bekerja pada tiga tingkat: pada tingkat framework Android menentukan InputConnection mana yang akan dibuat (koneksi antara EditText dan IME); pada tingkat IME (keyboard) menunjukkan karakter mana yang akan ditampilkan dan bagaimana memproses input; pada tingkat aplikasi menyaring karakter melalui InputFilter yang terintegrasi dalam EditText. Menurut Android Source Code (AOSP, 2026), mask bit diproses dalam metode TextView.getInputType(), yang mengembalikan nilai saat ini, dan setInputType(), yang mengonfigurasi ulang filter internal dan koneksi dengan IME.
Fitur penting InputType — tidak dapat dibaca dari proses lain karena alasan keamanan. Ini mencegah pencurian data melalui akses ke jenis input (misalnya, menentukan apakah kolom adalah kata sandi). Saat mencoba membaca InputType dari aplikasi lain, TYPE_CLASS_TEXT dikembalikan secara default.
// Konstanta dasar InputType
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Mask untuk mengekstrak kelas
InputType.TYPE_MASK_CLASS // 0x0000000F
Di Android, empat kelas dasar InputType didefinisikan. Setiap kelas sesuai dengan kategori data tertentu dan mengaktifkan jenis keyboard yang sesuai. Kelas ditunjukkan dalam bit 0–4 dari mask bit dan dapat diekstraksi melalui mask TYPE_MASK_CLASS (0x0F).
| Kelas | Konstanta | Keyboard | Penggunaan |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Teks, komentar, deskripsi |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerik | Jumlah, harga, usia |
| PHONE | TYPE_CLASS_PHONE (3) | Telepon | Nomor telepon |
| DATETIME | TYPE_CLASS_DATETIME (4) | Tanggal/waktu | Tanggal, waktu |
TYPE_CLASS_DATETIME jarang digunakan secara langsung — biasanya untuk input tanggal digunakan DatePicker atau DatePickerDialog, bukan kolom teks. Namun dalam beberapa skenario (input tanggal manual cepat) kelas ini dapat berguna. Kelas ini tidak memiliki keyboard khusus dan biasanya menampilkan keyboard numerik.
Setiap kelas input dapat digabungkan dengan variasi (variation) — subtipe yang ditunjukkan dalam bit 5–7. Misalnya, TYPE_TEXT_VARIATION_PASSWORD (bit 5) menambahkan input tersembunyi ke kelas TEXT. Bit variasi: 0x000000E0 (mask TYPE_MASK_VARIATION).
Flag pengubah InputType (bit 8–31) menambahkan kemampuan tambahan ke kelas dasar. Mereka tidak mengubah jenis keyboard, tetapi mengubah perilaku input. Flag bersifat spesifik untuk setiap kelas — flag untuk TEXT tidak berfungsi dengan NUMBER dan sebaliknya. Di bawah ini adalah pengubah utama untuk setiap kelas.
Menurut Android Developers Documentation (2026), flag untuk kelas yang berbeda tidak tumpang tindih — upaya menggunakan flag TEXT dengan NUMBER akan diabaikan. Untuk memeriksa flag yang diatur, gunakan AND bitwise: (inputType and FLAG) != 0.
Kombinasi yang tepat dari InputType dengan kelas dan flag adalah kunci untuk membuat formulir yang nyaman. Mari kita lihat skenario umum dan konfigurasi InputType yang sesuai. Setiap skenario mengoptimalkan input untuk jenis data tertentu, membuat formulir intuitif dan mempercepat pengisian.
| Skenario | InputType | Keyboard |
|---|---|---|
| Nama | textCapWords | QWERTY, setiap kata dengan huruf kapital |
| textEmailAddress | QWERTY dengan @ dan . | |
| Kata sandi | textPassword | QWERTY, input tersembunyi |
| Telepon | phone | Angka dengan +, #, * |
| Harga | numberDecimal | Angka dengan koma |
| Jumlah | number | Hanya angka |
| Komentar | textCapSentences|textMultiLine | QWERTY, multi-baris |
| Cari | text|textNoSuggestions | QWERTY tanpa saran |
// Kombinasi untuk bidang harga
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Kombinasi untuk bidang komentar
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Mengatur InputType secara programatis melalui setInputType() menimpa nilai sebelumnya. Jika hanya perlu mengubah sebagian mask (misalnya, menambahkan flag), Anda harus menyimpan nilai saat ini, mengubahnya, dan menerapkannya kembali. Setiap panggilan setInputType() mengonfigurasi ulang filter internal EditText.
Metode setRawInputType() berbeda dari setInputType karena tidak menyebabkan konfigurasi ulang filter dan saran. Ini digunakan untuk perubahan sementara InputType tanpa memuat ulang status EditText sepenuhnya. Setelah memanggil setInputType(), disarankan untuk memulai ulang IME agar keyboard diperbarui.
// Beralih antara kata sandi dan teks terlihat
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Pertahankan posisi kursor
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Dapatkan kelas input
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Dapatkan variasi input
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Periksa apakah bidang kata sandi
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Pemilihan InputType yang tepat bukan hanya UX, tetapi juga keamanan dan kebenaran data. Rekomendasi utama meliputi: selalu tentukan InputType eksplisit untuk setiap EditText; gunakan kelas input yang paling spesifik; jangan menggabungkan flag dari kelas yang berbeda; untuk bidang dengan data sensitif gunakan variasi PASSWORD; untuk bidang pencarian gunakan imeOptions=”actionSearch”.
InputType juga memengaruhi kerja layanan aksesibilitas (Accessibility). Bidang dengan tipe textPassword mendapatkan perlindungan tambahan dari pembaca layar — mereka tidak membacakan karakter yang dimasukkan dengan suara keras. Untuk bidang dengan textEmailAddress, Screen Reader memberi tahu pengguna bahwa bidang tersebut ditujukan untuk email dan menawarkan saran yang sesuai.
Menurut Material Design Guidelines (2025), InputType harus sesuai dengan jenis data yang dimasukkan pengguna. InputType yang salah tidak hanya memperlambat input, tetapi juga dapat menyebabkan kesalahan: misalnya, jika untuk memasukkan nomor telepon dibiarkan textMultiLine, keyboard tidak akan menampilkan blok numerik, dan pengguna harus mengubah tata letak secara manual setiap kali.
Pertanyaan yang sering diajukan
InputType — adalah atribut EditText yang menentukan jenis data yang dimasukkan melalui mask bit. Keyboard Type — adalah nama tidak resmi untuk jenis visual keyboard yang diaktifkan oleh InputType. InputType juga memengaruhi penyaringan karakter, koreksi otomatis, dan pelengkapan otomatis, bukan hanya tata letak keyboard.
Atur editText.inputType = InputType.TYPE_CLASS_TEXT atau gunakan konstanta InputType.TYPE_NULL (0x00000000) untuk reset total. Dengan TYPE_NULL, bidang tidak akan menampilkan keyboard saat fokus. Untuk kembali ke input teks standar, atur TYPE_CLASS_TEXT tanpa flag.
Tidak dapat membuat kelas InputType baru karena merupakan bagian dari framework Android. Namun, Anda dapat menggabungkan kelas dan flag yang ada untuk mencapai perilaku yang diinginkan. Implementasikan penyaringan karakter tambahan melalui InputFilter, yang diatur pada EditText melalui metode setFilters().
InputType diteruskan ke sistem input melalui InputConnection. IME membaca kelas dan variasi InputType dan memilih tata letak keyboard yang sesuai. Misalnya, TYPE_CLASS_NUMBER dengan TYPE_NUMBER_FLAG_DECIMAL menyebabkan keyboard menampilkan blok numerik dengan titik. Sebagian besar keyboard modern mengikuti rekomendasi ini.
Gunakan properti editText.inputType di Kotlin atau metode editText.getInputType() di Java. Untuk mengekstrak kelas, terapkan mask: inputType and InputType.TYPE_MASK_CLASS. Untuk memeriksa flag tertentu: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — jika hasilnya != 0, flag diatur.
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