InputType — είναι ένα χαρακτηριστικό Android που καθορίζει τη φύση των εισαγόμενων δεδομένων και τη συμπεριφορά του πληκτρολογίου για πεδία κειμένου. Η τιμή InputType αντιπροσωπεύει μια bitwise μάσκα που συνδυάζει την κλάση εισόδου (κείμενο, αριθμός, τηλέφωνο, ημερομηνία) και τροποποιητές (πολλαπλών γραμμών, αυτόματη διόρθωση, κεφαλαία γράμματα, κρυφή είσοδος). Το InputType επηρεάζει τον τύπο του εμφανιζόμενου πληκτρολογίου, το φιλτράρισμα των εισαγόμενων χαρακτήρων και τη λειτουργία αυτόματης συμπλήρωσης. Σύμφωνα με το Android Developers (2026), το InputType είναι ένα από τα πιο σημαντικά χαρακτηριστικά για τη διασφάλιση σωστής εισαγωγής δεδομένων και πρέπει να ορίζεται ρητά για κάθε επεξεργάσιμο πεδίο κειμένου.
Κύρια σημεία
InputType — είναι μια ακέραια σταθερά (Int) που κωδικοποιεί τη λειτουργία εισαγωγής για ένα πεδίο κειμένου. Στο Android, ορίζεται στην κλάση android.text.InputType. Η τιμή InputType αποτελείται από δύο μέρη: την κλάση εισόδου (bits 0–4) και τους τροποποιητές (bits 5–31). Η κλάση εισόδου καθορίζει τον βασικό τύπο δεδομένων — κείμενο, αριθμός, τηλέφωνο, ημερομηνία. Οι τροποποιητές διευκρινίζουν τη συμπεριφορά εντός της επιλεγμένης κλάσης — για παράδειγμα, για την κλάση κειμένου μπορεί να ενεργοποιηθεί η αυτόματη διόρθωση, τα κεφαλαία γράμματα ή η εισαγωγή πολλαπλών γραμμών.
Ο μηχανισμός InputType λειτουργεί σε τρία επίπεδα: στο επίπεδο του πλαισίου Android καθορίζει ποιο InputConnection θα δημιουργηθεί (σύνδεση μεταξύ EditText και IME). στο επίπεδο IME (πληκτρολογίου) υποδεικνύει ποιους χαρακτήρες να εμφανίσει και πώς να επεξεργαστεί την είσοδο. στο επίπεδο εφαρμογής φιλτράρει χαρακτήρες μέσω του InputFilter που είναι ενσωματωμένο στο EditText. Σύμφωνα με το Android Source Code (AOSP, 2026), η bitwise μάσκα επεξεργάζεται στη μέθοδο TextView.getInputType(), η οποία επιστρέφει την τρέχουσα τιμή, και στη setInputType(), η οποία αναδιαμορφώνει τα εσωτερικά φίλτρα και τη σύνδεση με το IME.
Ένα σημαντικό χαρακτηριστικό του InputType — δεν μπορεί να διαβαστεί από άλλη διεργασία για λόγους ασφαλείας. Αυτό αποτρέπει την κλοπή δεδομένων μέσω πρόσβασης στον τύπο εισόδου (για παράδειγμα, τον προσδιορισμό αν ένα πεδίο είναι κωδικός πρόσβασης). Κατά την προσπάθεια ανάγνωσης InputType από άλλη εφαρμογή, επιστρέφεται προεπιλεγμένα TYPE_CLASS_TEXT.
// Βασικές σταθερές 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
// Μάσκα για εξαγωγή κλάσης
InputType.TYPE_MASK_CLASS // 0x0000000F
Στο Android ορίζονται τέσσερις βασικές κλάσεις InputType. Κάθε κλάση αντιστοιχεί σε μια συγκεκριμένη κατηγορία δεδομένων και ενεργοποιεί τον αντίστοιχο τύπο πληκτρολογίου. Η κλάση υποδεικνύεται στα bits 0–4 της bitwise μάσκας και μπορεί να εξαχθεί μέσω της μάσκας TYPE_MASK_CLASS (0x0F).
| Κλάση | Σταθερά | Πληκτρολόγιο | Εφαρμογή |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Κείμενο, σχόλια, περιγραφή |
| NUMBER | TYPE_CLASS_NUMBER (2) | Αριθμητικό | Ποσότητα, τιμή, ηλικία |
| PHONE | TYPE_CLASS_PHONE (3) | Τηλεφώνου | Αριθμός τηλεφώνου |
| DATETIME | TYPE_CLASS_DATETIME (4) | Ημερομηνίας/ώρας | Ημερομηνία, ώρα |
Το TYPE_CLASS_DATETIME χρησιμοποιείται σπάνια άμεσα — συνήθως για εισαγωγή ημερομηνίας χρησιμοποιούνται DatePicker ή DatePickerDialog, όχι πεδίο κειμένου. Ωστόσο, σε ορισμένα σενάρια (γρήγορη χειροκίνητη εισαγωγή ημερομηνίας) αυτή η κλάση μπορεί να είναι χρήσιμη. Δεν έχει εξειδικευμένο πληκτρολόγιο και συνήθως εμφανίζει αριθμητικό πληκτρολόγιο.
Κάθε κλάση εισόδου μπορεί να συνδυαστεί με παραλλαγές (variation) — υποτύπους που υποδεικνύονται στα bits 5–7. Για παράδειγμα, το TYPE_TEXT_VARIATION_PASSWORD (bit 5) προσθέτει κρυφή είσοδο στην κλάση TEXT. Bits παραλλαγής: 0x000000E0 (μάσκα TYPE_MASK_VARIATION).
Σημαίες-τροποποιητές InputType (bits 8–31) προσθέτουν επιπλέον δυνατότητες στη βασική κλάση. Δεν αλλάζουν τον τύπο πληκτρολογίου, αλλά τροποποιούν τη συμπεριφορά εισαγωγής. Οι σημαίες είναι συγκεκριμένες για κάθε κλάση — οι σημαίες για TEXT δεν λειτουργούν με NUMBER και αντίστροφα. Παρακάτω παρατίθενται οι κύριοι τροποποιητές για κάθε κλάση.
Σύμφωνα με το Android Developers Documentation (2026), οι σημαίες για διαφορετικές κλάσεις δεν αλληλεπικαλύπτονται — η προσπάθεια χρήσης σημαίας TEXT με NUMBER θα αγνοηθεί. Για τον έλεγχο μιας ορισμένης σημαίας χρησιμοποιείται bitwise AND: (inputType and FLAG) != 0.
Ο σωστός συνδυασμός InputType με κλάσεις και σημαίες είναι το κλειδί για τη δημιουργία βολικών φορμών. Ας εξετάσουμε τυπικά σενάρια και τις αντίστοιχες διαμορφώσεις InputType. Κάθε σενάριο βελτιστοποιεί την εισαγωγή για έναν συγκεκριμένο τύπο δεδομένων, καθιστώντας τη φόρμα διαισθητική και επιταχύνοντας τη συμπλήρωση.
| Σενάριο | InputType | Πληκτρολόγιο |
|---|---|---|
| Όνομα | textCapWords | QWERTY, κάθε λέξη με κεφαλαίο |
| textEmailAddress | QWERTY με @ και . | |
| Κωδικός | textPassword | QWERTY, κρυφή είσοδος |
| Τηλέφωνο | phone | Ψηφία με +, #, * |
| Τιμή | numberDecimal | Ψηφία με υποδιαστολή |
| Ποσότητα | number | Μόνο ψηφία |
| Σχόλιο | textCapSentences|textMultiLine | QWERTY, πολλαπλών γραμμών |
| Αναζήτηση | text|textNoSuggestions | QWERTY χωρίς προτάσεις |
// Συνδυασμός για πεδίο τιμής
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Συνδυασμός για πεδίο σχολίου
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Η ρύθμιση InputType προγραμματιστικά μέσω setInputType() αντικαθιστά την προηγούμενη τιμή. Εάν πρέπει να αλλάξει μόνο ένα μέρος της μάσκας (για παράδειγμα, προσθήκη σημαίας), πρέπει να αποθηκευτεί η τρέχουσα τιμή, να τροποποιηθεί και να εφαρμοστεί ξανά. Κάθε κλήση setInputType() αναδιαμορφώνει τα εσωτερικά φίλτρα του EditText.
Η μέθοδος setRawInputType() διαφέρει από τη setInputType στο ότι δεν προκαλεί αναδιαμόρφωση φίλτρων και προτάσεων. Χρησιμοποιείται για προσωρινή αλλαγή του InputType χωρίς πλήρη επαναφόρτωση της κατάστασης του EditText. Μετά την κλήση setInputType(), συνιστάται η επανεκκίνηση του IME για ενημέρωση του πληκτρολογίου.
// Εναλλαγή μεταξύ κωδικού και ορατού κειμένου
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
}
// Διατήρηση θέσης δρομέα
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Λήψη κλάσης εισόδου
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Λήψη παραλλαγής εισόδου
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Έλεγχος αν είναι πεδίο κωδικού
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Η σωστή επιλογή InputType δεν είναι μόνο UX, αλλά και ασφάλεια και ορθότητα δεδομένων. Οι κύριες συστάσεις περιλαμβάνουν: να ορίζετε πάντα ρητό InputType για κάθε EditText. να χρησιμοποιείτε την πιο συγκεκριμένη κλάση εισόδου. να μην συνδυάζετε σημαίες από διαφορετικές κλάσεις. για πεδία με ευαίσθητα δεδομένα να χρησιμοποιείτε τις παραλλαγές PASSWORD. για πεδία αναζήτησης να χρησιμοποιείτε imeOptions=”actionSearch”.
Το InputType επηρεάζει επίσης τη λειτουργία των υπηρεσιών προσβασιμότητας (Accessibility). Τα πεδία με τύπο textPassword λαμβάνουν επιπλέον προστασία από αναγνώστες οθόνης — δεν διαβάζουν δυνατά τους εισαγόμενους χαρακτήρες. Για πεδία με textEmailAddress, ο Screen Reader ενημερώνει τον χρήστη ότι το πεδίο προορίζεται για email και προσφέρει κατάλληλες προτάσεις.
Σύμφωνα με το Material Design Guidelines (2025), το InputType πρέπει να αντιστοιχεί στον τύπο δεδομένων που εισάγει ο χρήστης. Το λάθος InputType όχι μόνο επιβραδύνει την εισαγωγή, αλλά μπορεί επίσης να οδηγήσει σε σφάλματα: για παράδειγμα, εάν για την εισαγωγή αριθμού τηλεφώνου παραμείνει textMultiLine, το πληκτρολόγιο δεν θα εμφανίσει το αριθμητικό μπλοκ και ο χρήστης θα αναγκάζεται να αλλάζει χειροκίνητα τη διάταξη κάθε φορά.
Συχνές ερωτήσεις
InputType — είναι ένα χαρακτηριστικό EditText που καθορίζει τον τύπο των εισαγόμενων δεδομένων μέσω bitwise μάσκας. Keyboard Type — είναι η ανεπίσημη ονομασία για τον οπτικό τύπο πληκτρολογίου που ενεργοποιείται από το InputType. Το InputType επηρεάζει επίσης το φιλτράρισμα χαρακτήρων, την αυτόματη διόρθωση και την αυτόματη συμπλήρωση, όχι μόνο τη διάταξη του πληκτρολογίου.
Ορίστε editText.inputType = InputType.TYPE_CLASS_TEXT ή χρησιμοποιήστε τη σταθερά InputType.TYPE_NULL (0x00000000) για πλήρη επαναφορά. Με TYPE_NULL το πεδίο δεν θα εμφανίζει πληκτρολόγιο κατά την εστίαση. Για επιστροφή στην τυπική εισαγωγή κειμένου, ορίστε TYPE_CLASS_TEXT χωρίς σημαίες.
Δεν μπορεί να δημιουργηθεί νέα κλάση InputType, καθώς αποτελεί μέρος του πλαισίου Android. Ωστόσο, μπορείτε να συνδυάσετε υπάρχουσες κλάσεις και σημαίες για να επιτύχετε την επιθυμητή συμπεριφορά. Εφαρμόστε πρόσθετο φιλτράρισμα χαρακτήρων μέσω InputFilter, το οποίο ορίζεται στο EditText μέσω της μεθόδου setFilters().
Το InputType μεταβιβάζεται στο σύστημα εισόδου μέσω του InputConnection. Το IME διαβάζει την κλάση και την παραλλαγή InputType και επιλέγει την αντίστοιχη διάταξη πληκτρολογίου. Για παράδειγμα, το TYPE_CLASS_NUMBER με TYPE_NUMBER_FLAG_DECIMAL κάνει το πληκτρολόγιο να εμφανίζει αριθμητικό μπλοκ με υποδιαστολή. Τα περισσότερα σύγχρονα πληκτρολόγια ακολουθούν αυτές τις συστάσεις.
Χρησιμοποιήστε την ιδιότητα editText.inputType σε Kotlin ή τη μέθοδο editText.getInputType() σε Java. Για εξαγωγή της κλάσης, εφαρμόστε τη μάσκα: inputType and InputType.TYPE_MASK_CLASS. Για έλεγχο συγκεκριμένης σημαίας: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — εάν το αποτέλεσμα != 0, η σημαία είναι ορισμένη.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης