InputFilter: τι είναι, η διεπαφή InputFilter και φιλτράρισμα σε Android

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-08 Χρόνος ανάγνωσης: 5 λεπ

Το InputFilter είναι μια διεπαφή Android SDK που σας επιτρέπει να προσεπιλάζετε και να τροποποιείτε το εισαγόμενο κείμενο πριν από την εμφάνισή του στο EditText. Ο δημιουργός καθορίζει κανόνες φιλτραρίσματος: επιτρεπόμενοι χαρακτήρες, μέγιστο μήκος, μορφή εισαγωγής. Σύμφωνα με το Android Developers, 2026, το InputFilter χρησιμοποιείται για τον περιορισμό εισαγωγής γραμμάτων, αριθμών, ειδικών χαρακτήρων και της αυτόματης μορφοποίησης κειμένου. Σε αντίθεση με το TextWatcher, το φίλτρο λειτουργεί πριν την αλλαγή κειμένου, αποτρέποντας την εσφαλμένη εισαγωγή σε επίπεδο πηγής.

Βασικά σημεία

  • InputFilter — διεπαφή Android για περιορισμό και μορφοποίηση εισαγωγής σε EditText και TextView.
  • Η μέθοδος filter καλείται πριν την αλλαγή κειμένου και επιστρέφει ένα φιλτραρισμένο CharSequence ή null εάν η αλλαγή επιτρέπεται.
  • InputFilter.LengthFilter — τυπική υλοποίηση για περιορισμό μέγιστου μήκους κειμένου.
  • Προσαρμοσμένα φίλτρα επιτρέπουν την απαγόρευση συγκεκριμένων χαρακτήρων, την εφαρμογή μάσκας εισαγωγής ή την μετατροπή πεζών/κεφαλαίων γραμμάτων.
  • Αλυσίδα φιλτρων — πολλαπλά InputFilter μπορούν να εφαρμοστούν σε ένα EditText ταυτόχρονα και εκτελούνται διαδοχικά.

Τι είναι το InputFilter και γιατί χρειάζεται;

InputFilter είναι μια λειτουργική διεπαφή από το πακέτο android.text που ορίζει μια μοναδική μέθοδο filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Καλείται αυτόματα κάθε φορά που ο χρήστης προσπαθεί να εισαγάγει, να επικολλήσει ή να αντικαταστήσει κείμενο στο EditText. Η τιμή που επιστρέφεται καθορίζει εάν η αλλαγή θα γίνει αποδεκτή, απορριπτεία ή τροποποιημένη.

Ο κύριος σκοπός του InputFilter είναι η πρόληψη λανθασμένης εισαγωγής πριν το κείμενο να φτάσει στο πεδίο. Η μέθοδος filter λαμβάνει έξι παραμέτρους. Εάν η μέθοδος επιστρέψει null, η αλλαγή γίνεται αποδεκτή χωρίς αλλαγές. Εάν επιστρέψει μια κενή συμβολοσειρά “”, η αλλαγή αποκλείεται. Το InputFilter δεν μεταβάλλει την αρχική πηγή δεδομένων, αλλά επιστρέφει μόνο τη φιλτραρισμένη έκδοση.

Πώς λειτουργεί το InputFilter

Για παράδειγμα, εάν ο χρήστης προσπαθήσει να εισαγάγει το γράμμα “a” σε ένα πεδίο όπου επιτρέπονται μόνο αριθμοί, το φίλτρο επιστρέφει “” και ο χαρακτήρας δεν εμφανίζεται. Το InputFilter δεν μεταβάλλει την αρχική πηγή δεδομένων, αλλά επιστρέφει μόνο τη φιλτραρισμένη έκδοση.

Τυπικά φίλτρα στο Android SDK

Το Android SDK παρέχει πολλάπλες ενσωματωμένες υλοποιήσεις του InputFilter. Το πιο κοινό είναι το InputFilter.LengthFilter που περιορίζει το μέγιστο μήκος κειμένου. Το InputFilter.AllCaps μετατρέπει όλους τους εισαγόμενους χαρακτήρες σε κεφαλαία.

ΦίλτροΣκοπόςΠαράδειγμα
LengthFilterΠεριορισμός μήκουςΠεδίο ονόματος έως 50 χαρακτήρες
AllCapsΜετατροπή σε κεφαλαίαΠεδίο ταχυδρομικού κώδικα
Προσαρμοσμένο InputFilterΚανόνες φιλτραρίσματοςΜόνο αριθμοί, ειδικοί χαρακτήρες απαγορεύονται

Δημιουργία προσαρμοσμένου InputFilter

Για να δημιουργήσετε ένα προσαρμοσμένο φίλτρο, πρέπει να υλοποιήσετε τη διεπαφή InputFilter και να παρακάμψετε τη μέθοδο filter. Το παράδειγμα φίλτρου DigitsInputFilter διανύει όλους τους χαρακτήρες και κρατά μόνο τους αριθμούς.

kotlin
class DigitsInputFilter : InputFilter {
    override fun filter(
        source: CharSequence?,
        start: Int,
        end: Int,
        dest: Spanned?,
        dstart: Int,
        dend: Int
    ): CharSequence? {
        val sb = StringBuilder()
        for (i in start until end) {
            val c = source?.get(i)
            if (c != null && Character.isDigit(c)) {
                sb.append(c)
            }
        }
        return if (sb.length == end - start) null else sb
    }
}

Ένα άλλο δημοφιλές σενάριο είναι το φίλτρο που απαγορεύει ειδικούς χαρακτήρες.

Εφαρμογή InputFilter σε EditText

Τα φίλτρα ορίζονται στο EditText μέσω της μεθόδου setFilters(InputFilter[]). Ο πίνακας φιλτρων αντικαθιστά τα τρέχοντα φίλτρα.

kotlin
val editText = findViewById<EditText>(R.id.phone_input)
editText.filters = arrayOf(
    DigitsInputFilter(),
    InputFilter.LengthFilter(10)
)

Στο παράδειγμα, δύο φίλτρα ορίζονται: DigitsInputFilter (μόνο αριθμοί) και LengthFilter (μέγιστο 10 χαρακτήρες). Τα φίλτρα μπορούν να οριστούν και μέσω της XML ιδιότητας android:inputType.

InputFilter και επαλήθευση εισαγωγής

Το InputFilter και το TextWatcher έχουν διαφορετικές λειτουργίες και συχνά χρησιμοποιούνται μαζί. Το InputFilter λειτουργεί σε επίπεδο εισαγωγής, το TextWatcher λειτουργεί μετά την εισαγωγή.

ΚριτήριοInputFilterTextWatcher
Χρόνος δράσηςΠριν την αλλαγήΜετά την αλλαγή
ΣκοπόςΑποκλεισμός λανθασμένων χαρ.Αντίδραση, επαλήθευση, UI
Επιστρεφόμενη τιμήΦιλτραρισμένο κείμενο ή nullΚαμία (void)
ΕφαρμογήsetFilters()addTextChangedListener()

Συχνές Ερωτήσεις

Ποια είναι η διαφορά μεταξύ InputFilter και TextWatcher;

Το InputFilter προσεπιλάζει την εισαγωγή πριν την αλλαγή κειμένου. Το TextWatcher καλείται μετά την αλλαγή.

Πώς να εφαρμόσω πολλαπλά φίλτρα σε EditText;

Περάστε έναν πίνακα φιλτρων στη μέθοδο setFilters(). Τα φίλτρα εκτελούνται διαδοχικά.

Μπορεί το InputFilter να χρησιμοποιηθεί για μορφοποίηση;

Ναι, το InputFilter μπορεί να τροποποιήσει την εισαγωγή επιστρέφοντας ένα τροποποιημένο CharSequence.

Ποιους χαρακτήρες μπορώ να απαγορεύσω μέσω InputFilter;

Οποιουςδήποτε: κενά, γράμματα, αριθμοί, ειδικοί χαρακτήρες, Unicode χαρακτήρες.

Λειτουργεί το InputFilter με προγραμματική αλλαγή;

Όχι, το InputFilter λειτουργεί μόνο σε εισαγωγή χρήστη ή επικόλληση από πρόχειρο.

Περίληψη

  • InputFilter — διεπαφή Android για φιλτράρισμα και μορφοποίηση εισαγωγής σε επίπεδο χαρακτήρα.
  • filter method επιστρέφει null για επιτροπή, “” για αποκλεισμό ή νέο CharSequence για τροποποίηση.
  • LengthFilter και AllCaps — τυπικά Android SDK φίλτρα.
  • Προσαρμοσμένα φίλτρα δημιουργούνται μέσω υλοποίησης της InputFilter.
  • Αλυσίδα φιλτρων επιτρέπει συνδυασμό κανόνων.
  • InputFilter και TextWatcher δεν συγκρούονται.
  • Προγραμματική αλλαγή δεν διερχεται από InputFilter.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης