InputType — apa itu, atribut input dan konfigurasinya di Android

Penulis: IT Sectr Diterbitkan: 2026-07-07 Waktu membaca: 9 mnt

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 — mask bit yang menentukan kelas input dan pengubah untuk EditText.
  • Kelas input — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Pengubah — flag yang merinci perilaku: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Penggabungan — kelas dan pengubah digabungkan melalui OR bitwise untuk konfigurasi yang tepat.
  • Pengaruh — InputType yang benar mempercepat input, mengurangi kesalahan, dan meningkatkan UX formulir.

Apa itu InputType di Android

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.

kotlin
// 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

Kelas InputType: TEXT, NUMBER, PHONE, DATETIME

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).

KelasKonstantaKeyboardPenggunaan
TEXTTYPE_CLASS_TEXT (1)QWERTYTeks, komentar, deskripsi
NUMBERTYPE_CLASS_NUMBER (2)NumerikJumlah, harga, usia
PHONETYPE_CLASS_PHONE (3)TeleponNomor telepon
DATETIMETYPE_CLASS_DATETIME (4)Tanggal/waktuTanggal, 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

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.

Flag untuk TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — semua huruf kapital.
  • TYPE_TEXT_FLAG_CAP_WORDS — setiap kata dimulai dengan huruf kapital.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — huruf kapital di awal kalimat (default).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — koreksi otomatis kesalahan ketik.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — pelengkapan otomatis (untuk AutoCompleteTextView).
  • TYPE_TEXT_FLAG_MULTI_LINE — input multi-baris.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — menonaktifkan saran.

Flag untuk NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — mengizinkan angka negatif (tanda minus).
  • TYPE_NUMBER_FLAG_DECIMAL — mengizinkan titik desimal.

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 InputType: contoh untuk berbagai skenario

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.

SkenarioInputTypeKeyboard
NamatextCapWordsQWERTY, setiap kata dengan huruf kapital
EmailtextEmailAddressQWERTY dengan @ dan .
Kata sanditextPasswordQWERTY, input tersembunyi
TeleponphoneAngka dengan +, #, *
HarganumberDecimalAngka dengan koma
JumlahnumberHanya angka
KomentartextCapSentences|textMultiLineQWERTY, multi-baris
Caritext|textNoSuggestionsQWERTY tanpa saran
kotlin
// 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

Bekerja secara programatis dengan InputType

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.

Mengganti mode

kotlin
// 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)
}

Mengekstrak kelas dan variasi

kotlin
// 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
}

Praktik terbaik memilih InputType

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.

  • Eksplisit — selalu atur InputType secara eksplisit, jangan bergantung pada nilai default (textMultiLine).
  • Spesifisitas — gunakan tipe yang paling spesifik: textEmailAddress, bukan text untuk email.
  • Keamanan — untuk kata sandi, PIN, dan data kartu gunakan variasi PASSWORD.
  • Pelengkapan otomatis — gabungkan InputType dengan autofillHints untuk mendukung pengelola kata sandi.
  • Pengujian — periksa perilaku pada keyboard yang berbeda (Gboard, SwiftKey, Samsung Keyboard).

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

Apa perbedaan antara InputType dan Keyboard Type?

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.

Bagaimana cara mereset InputType ke nilai default?

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.

Bisakah membuat InputType kustom?

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().

Bagaimana InputType memengaruhi IME (keyboard)?

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.

Bagaimana cara memeriksa InputType saat runtime?

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

  • InputType — mask bit yang terdiri dari kelas input (TEXT, NUMBER, PHONE, DATETIME) dan pengubah.
  • Kelas input menentukan tipe dasar data dan jenis keyboard yang ditampilkan.
  • Pengubah merinci perilaku: multi-baris, koreksi otomatis, huruf kapital, input tersembunyi.
  • Penggabungan melalui OR bitwise memungkinkan pembuatan konfigurasi yang tepat untuk berbagai skenario.
  • Variasi PASSWORD menonaktifkan koreksi otomatis, menyembunyikan karakter, dan mencegah pencatatan ke kamus.
  • Pengaturan programatis melalui setInputType() memerlukan restart IME untuk memperbarui keyboard.
  • Praktik terbaik — atur InputType secara eksplisit, gunakan tipe spesifik, dan uji pada keyboard yang berbeda.

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