InputType — egy Android attribútum, amely meghatározza a beírt adatok jellegét és a billentyűzet viselkedését szövegmezőkhöz. Az InputType érték egy bitmaszk, amely kombinálja a beviteli osztályt (szöveg, szám, telefon, dátum) és a módosítókat (többsoros, automatikus javítás, nagybetűk, rejtett bevitel). Az InputType befolyásolja a megjelenített billentyűzet típusát, a beírt karakterek szűrését és az automatikus kiegészítés működését. A Android Developers (2026) szerint az InputType az egyik legfontosabb attribútum a helyes adatbevitel biztosításához, és minden szerkeszthető szövegmezőhöz explicit módon be kell állítani.
Főbb pontok
InputType — egy egész szám konstans (Int), amely kódolja a beviteli módot egy szövegmező számára. Androidban az android.text.InputType osztályban van definiálva. Az InputType érték két részből áll: a beviteli osztályból (bitek 0–4) és a módosítókból (bitek 5–31). A beviteli osztály meghatározza az alap adattípust — szöveg, szám, telefon, dátum. A módosítók pontosítják a viselkedést a kiválasztott osztályon belül — például a szöveges osztályhoz engedélyezhető az automatikus javítás, nagybetűk vagy többsoros bevitel.
Az InputType mechanizmus három szinten működik: az Android keretrendszer szintjén meghatározza, melyik InputConnection jön létre (kapcsolat az EditText és az IME között); az IME (billentyűzet) szintjén jelzi, mely karaktereket jelenítse meg és hogyan dolgozza fel a bevitelet; az alkalmazás szintjén szűri a karaktereket az EditText-be épített InputFilteren keresztül. Az Android Source Code (AOSP, 2026) szerint a bitmaszk a TextView.getInputType() metódusban, amely az aktuális értéket adja vissza, és a setInputType() metódusban, amely újrakonfigurálja a belső szűrőket és az IME kapcsolatot, kerül feldolgozásra.
Az InputType fontos jellemzője — biztonsági okokból nem olvasható ki másik folyamatból. Ez megakadályozza az adatlopást a beviteli típushoz való hozzáférésen keresztül (például annak meghatározása, hogy a mező jelszó-e). Amikor egy másik alkalmazásból próbálják olvasni az InputType-ot, alapértelmezés szerint TYPE_CLASS_TEXT kerül visszaadásra.
// Alapvető InputType konstansok
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Maszk az osztály kinyeréséhez
InputType.TYPE_MASK_CLASS // 0x0000000F
Androidban négy alap InputType osztály van definiálva. Minden osztály egy adott adatkategóriának felel meg és aktiválja a megfelelő billentyűzet típust. Az osztály a bitmaszk 0–4 bitjeiben van jelezve, és a TYPE_MASK_CLASS (0x0F) maszk segítségével nyerhető ki.
| Osztály | Konstans | Billentyűzet | Alkalmazás |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Szöveg, megjegyzések, leírás |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerikus | Mennyiség, ár, életkor |
| PHONE | TYPE_CLASS_PHONE (3) | Telefon | Telefonszám |
| DATETIME | TYPE_CLASS_DATETIME (4) | Dátum/idő | Dátum, idő |
A TYPE_CLASS_DATETIME ritkán használatos közvetlenül — általában dátum beviteléhez DatePicker vagy DatePickerDialog használatos, nem szövegmező. Azonban bizonyos forgatókönyvekben (gyors kézi dátumbevitel) ez az osztály hasznos lehet. Nincs specializált billentyűzete és általában numerikus billentyűzetet jelenít meg.
Minden beviteli osztály kombinálható variációkkal (variation) — az 5–7 bitekben jelzett altípusokkal. Például a TYPE_TEXT_VARIATION_PASSWORD (bit 5) rejtett bevitelet ad a TEXT osztályhoz. A variáció bitek: 0x000000E0 (TYPE_MASK_VARIATION maszk).
InputType zászló-módosítók (bitek 8–31) további képességeket adnak az alap osztályhoz. Nem változtatják meg a billentyűzet típusát, de módosítják a bevitel viselkedését. A zászlók osztályspecifikusak — a TEXT zászlói nem működnek a NUMBER-rel és fordítva. Az alábbiakban felsoroljuk a fő módosítókat minden osztályhoz.
Az Android Developers Documentation (2026) szerint a különböző osztályok zászlói nem fedik át egymást — a TEXT zászló NUMBER-rel való használati kísérlete figyelmen kívül lesz hagyva. A beállított zászló ellenőrzéséhez bitenkénti AND használatos: (inputType and FLAG) != 0.
Az InputType helyes kombinációja osztályokkal és zászlókkal a kulcs a kényelmes űrlapok létrehozásához. Vizsgáljuk meg a tipikus forgatókönyveket és a megfelelő InputType konfigurációkat. Minden forgatókönyv optimalizálja a bevitelet egy adott adattípushoz, intuitívvá téve az űrlapot és gyorsítva a kitöltést.
| Forgatókönyv | InputType | Billentyűzet |
|---|---|---|
| Név | textCapWords | QWERTY, minden szó nagybetűvel |
| textEmailAddress | QWERTY @ és . jellel | |
| Jelszó | textPassword | QWERTY, rejtett bevitel |
| Telefon | phone | Számjegyek +, #, * jelekkel |
| Ár | numberDecimal | Számjegyek vesszővel |
| Mennyiség | number | Csak számjegyek |
| Megjegyzés | textCapSentences|textMultiLine | QWERTY, többsoros |
| Keresés | text|textNoSuggestions | QWERTY javaslatok nélkül |
// Kombináció ármezőhöz
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Kombináció megjegyzésmezőhöz
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Az InputType programozott beállítása a setInputType() segítségével felülírja az előző értéket. Ha csak a maszk egy részét kell megváltoztatni (például zászlót hozzáadni), el kell menteni az aktuális értéket, módosítani és újra alkalmazni. Minden setInputType() hívás újrakonfigurálja az EditText belső szűrőit.
A setRawInputType() metódus abban különbözik a setInputType-tól, hogy nem okozza a szűrők és javaslatok újrakonfigurálását. Az InputType ideiglenes megváltoztatására használatos az EditText állapotának teljes újratöltése nélkül. A setInputType() meghívása után ajánlott újraindítani az IME-t a billentyűzet frissítéséhez.
// Váltás jelszó és látható szöveg között
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
}
// Kurzor pozíció megtartása
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Beviteli osztály lekérése
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Beviteli variáció lekérése
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Annak ellenőrzése, hogy jelszómező-e
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
A helyes InputType választás nem csak UX, hanem biztonság és adathelyesség kérdése is. A fő ajánlások a következők: mindig adjon meg explicit InputType-ot minden EditText számára; használja a legspecifikusabb beviteli osztályt; ne kombináljon zászlókat különböző osztályokból; érzékeny adatokat tartalmazó mezőkhöz használja a PASSWORD variációkat; keresőmezőkhöz használja az imeOptions=„actionSearch” lehetőséget.
Az InputType befolyásolja az akadálymentesítési szolgáltatások (Accessibility) működését is. A textPassword típusú mezők extra védelmet kapnak a képernyőolvasóktól — nem olvassák fel hangosan a beírt karaktereket. A textEmailAddress mezőknél a Screen Reader tájékoztatja a felhasználót, hogy a mező email számára van, és megfelelő javaslatokat kínál.
A Material Design Guidelines (2025) szerint az InputType-nak meg kell felelnie a felhasználó által beírt adatok típusának. A helytelen InputType nem csak lassítja a bevitelet, hanem hibákhoz is vezethet: például ha telefonszám beviteléhez textMultiLine marad, a billentyűzet nem jeleníti meg a numerikus blokkot, és a felhasználó kénytelen lesz minden alkalommal manuálisan váltani az elrendezést.
Gyakran ismételt kérdések
InputType — egy EditText attribútum, amely bitmaszk segítségével határozza meg a bevitt adatok típusát. Keyboard Type — a vizuális billentyűzettípus nem hivatalos neve, amelyet az InputType aktivál. Az InputType befolyásolja a karakterek szűrését, az automatikus javítást és az automatikus kiegészítést is, nem csak a billentyűzet elrendezését.
Állítsa be a editText.inputType = InputType.TYPE_CLASS_TEXT értéket, vagy használja az InputType.TYPE_NULL (0x00000000) konstanst a teljes visszaállításhoz. TYPE_NULL esetén a mező fókuszáláskor nem jeleníti meg a billentyűzetet. A szabványos szövegbevitelhez való visszatéréshez állítsa be a TYPE_CLASS_TEXT-et zászlók nélkül.
Nem hozható létre új InputType osztály, mivel az az Android keretrendszer része. Azonban kombinálhatja a meglévő osztályokat és zászlókat a kívánt viselkedés eléréséhez. A további karakterszűrést InputFilter segítségével implementálja, amelyet a setFilters() metódussal állít be az EditText-en.
Az InputType az InputConnection-en keresztül kerül átadásra a beviteli rendszernek. Az IME beolvassa az InputType osztályát és variációját, és kiválasztja a megfelelő billentyűzet elrendezést. Például a TYPE_CLASS_NUMBER TYPE_NUMBER_FLAG_DECIMAL-lal azt eredményezi, hogy a billentyűzet egy numerikus blokkot jelenít meg ponttal. A legtöbb modern billentyűzet követi ezeket az ajánlásokat.
Használja a editText.inputType tulajdonságot Kotlinban vagy a editText.getInputType() metódust Javában. Az osztály kinyeréséhez alkalmazza a maszkot: inputType and InputType.TYPE_MASK_CLASS. Egy adott zászló ellenőrzéséhez: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — ha az eredmény != 0, a zászló be van állítva.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is