InputFilter: ano ito, interface ng InputFilter at pagsasala sa Android

May-akda: IT Sectr Nai-publish: 2026-07-08 Oras ng pagbabasa: 5 min

Ang InputFilter ay isang Android SDK interface na nagbibigay-daan sa iyo na maharang at baguhin ang inilagay na teksto bago ito maipakita sa EditText. Ang developer ay nagtatakda ng mga patakaran ng pagsasala: mga pinapayagang karakter, maximum na haba, format ng input. Ayon sa Android Developers, 2026, ang InputFilter ay ginagamit para sa paglilimita ng input ng mga titik, numero, espesyal na karakter at awtomatikong pag-format ng teksto. Hindi tulad ng TextWatcher, ang filter ay gumagana bago ang pagbabago ng teksto, na pumipigil sa maling input sa antas ng pinagmulan.

Mga Pangunahing Punto

  • InputFilter — Android interface para sa paglilimita at pag-format ng input sa EditText at TextView.
  • Ang filter na pamamaraan ay tinatawag bago ang pagbabago ng teksto at nagbabalik ng na-filter na CharSequence o null kung ang pagbabago ay pinapayagan.
  • InputFilter.LengthFilter — karaniwang implementasyon para sa paglilimita ng maximum na haba ng teksto.
  • Mga custom na filter ay nagbibigay-daan sa pagbawal ng tiyak na mga karakter, paglalapat ng input mask, o pag-convert ng rehistro ng titik.
  • Kadena ng filter — maraming InputFilter ang maaaring ilapat sa isang EditText nang sabay-sabay at isinasagawa nang sunud-sunod.

Ano ang InputFilter at para saan ito?

InputFilter ay isang functional na interface mula sa package na android.text na tumutukoy sa isang pamamaraan na filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend). Ito ay awtomatikong tinatawag sa tuwing susubukan ng user na mag-input, mag-paste, o palitan ang teksto sa EditText. Ang ibinalik na halaga ay tumutukoy kung ang pagbabago ay tatanggapin, tatanggihan, o babaguhin.

Ang pangunahing layunin ng InputFilter ay pigilan ang maling input bago pumasok ang teksto sa field. Ang pamamaraang filter ay tumatanggap ng anim na parameter. Kung ang pamamaraan ay nagbalik ng null, ang pagbabago ay tinatanggap nang walang pagbabago. Kung nagbalik ng walang laman na string “”, ang pagbabago ay nahaharang. Ang InputFilter ay hindi nagbabago ng orihinal na pinagmulan ng data, tanging ibinabalik ang na-filter na bersyon.

Paano gumagana ang InputFilter

Halimbawa, kung susubukan ng user na magpasok ng titik “a” sa isang field kung saan ang mga numero lamang ang pinapayagan, ang filter ay nagbabalik ng “” at ang karakter ay hindi lumilitaw. Ang InputFilter ay hindi nagbabago ng orihinal na pinagmulan ng data, tanging ibinabalik ang na-filter na bersyon.

Karaniwang mga filter sa Android SDK

Ang Android SDK ay nagbibigay ng ilang built-in na implementasyon ng InputFilter. Ang pinakakaraniwan ay ang InputFilter.LengthFilter na naglilimita sa maximum na haba ng teksto. Ang InputFilter.AllCaps ay nagko-convert ng lahat ng inilagay na karakter sa malalaking titik.

FilterLayuninHalimbawa ng paggamit
LengthFilterPaglilimita ng haba ng tekstoField ng pangalan hanggang 50 karakter
AllCapsConversion sa malalaking titikField ng postal code
Custom na InputFilterArbitrary na patakaran ng pagsasalaMga numero lamang, bawal ang espesyal na karakter

Paggawa ng custom na InputFilter

Upang gumawa ng custom na filter, kailangan mong ipatupad ang InputFilter interface at i-override ang filter method. Ang halimbawa ng filter na DigitsInputFilter ay dumadaan sa lahat ng karakter ng inilagay na teksto at nagpapanatili lamang ng mga numero.

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

Ang isa pang popular na senaryo ay ang filter na nagbabawal ng mga espesyal na karakter, ginagamit sa mga field ng username, paghahanap, at iba pang lugar kung saan hindi pinapayagan ang mga espesyal na karakter.

Paglalapat ng InputFilter sa EditText

Ang mga filter ay itinakda sa EditText sa pamamagitan ng pamamaraang setFilters(InputFilter[]). Ang array ng filter ay pumapalit sa kasalukuyang mga filter. Upang magdagdag ng filter sa mga umiiral na, kunin ang kasalukuyang mga filter sa pamamagitan ng getFilters(), gumawa ng bagong array, at itakda itong muli.

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

Sa halimbawa, dalawang filter ang itinakda: DigitsInputFilter (mga numero lamang) at LengthFilter (maximum na 10 karakter). Maaari ring itakda ang mga filter sa pamamagitan ng XML attribute na android:inputType.

InputFilter at pagpapatunay ng input

Ang InputFilter at TextWatcher ay may magkaibang function at madalas na ginagamit nang magkasama. Ang InputFilter ay gumagana sa antas ng input, ang TextWatcher ay gumagana pagkatapos ng input. Ang kumbinasyon ng parehong mga diskarte ay nagbibigay ng pinakamahusay na resulta.

KriteryaInputFilterTextWatcher
Oras ng pagkilosBago ang pagbabago ng tekstoPagkatapos ng pagbabago ng teksto
LayuninPagharang ng maling karakterReaksyon sa mga pagbabago, pagpapatunay, UI
Ibinabalik na halagaNa-filter na teksto o nullWala (void)
PaglalapatsetFilters()addTextChangedListener()

Mga Madalas Itanong

Ano ang pagkakaiba ng InputFilter at TextWatcher?

InputFilter ay humaharang ng input bago ang pagbabago ng teksto at maaaring harangin o baguhin ito. Ang TextWatcher ay tinatawag pagkatapos ng pagbabago at nagbibigay-daan sa reaksyon sa bagong halaga.

Paano maglapat ng maraming filter sa EditText?

Ibigay ang array ng mga filter sa pamamaraang setFilters(). Ang mga filter ay isinasagawa nang sunud-sunod ayon sa pagkakasunod-sunod ng array. Upang hindi mawala ang mga umiiral na filter, kunin ang mga ito sa pamamagitan ng getFilters(), idagdag ang bago sa kopya ng array, at itakda muli sa pamamagitan ng setFilters.

Maaari bang gamitin ang InputFilter para sa pag-format ng teksto?

Oo, maaaring baguhin ng InputFilter ang input sa pamamagitan ng pagbabalik ng binagong CharSequence. Para sa kumplikadong pag-format, mas mahusay na pagsamahin ang InputFilter sa TextWatcher.

Anong mga karakter ang maaaring bawalan sa pamamagitan ng InputFilter?

Anumang: mga puwang, titik, numero, espesyal na karakter, Unicode na karakter. Ang filter ay maaaring pahintulutan lamang ang Latin, lamang ang Cyrillic, o lamang ang tiyak na set ng karakter.

Gumagana ba ang InputFilter sa programmatic na pagbabago ng teksto?

Hindi, ang InputFilter ay gumagana lamang sa input ng user o pag-paste mula sa clipboard. Kung ang teksto ay itinakda nang programmatic sa pamamagitan ng setText(), ang mga filter ay hindi nalalapat. Gumamit ng pagpapatunay sa pamamagitan ng TextWatcher o tahasang pagsusuri bago itakda.

Buod

  • InputFilter — Android interface para sa pag-filter at pag-format ng input sa antas ng karakter bago ipakita sa EditText.
  • Ang filter method ay nagbabalik ng null para sa pahintulot, “” para sa pagharang, o bagong CharSequence para sa pagbabago.
  • LengthFilter at AllCaps — karaniwang Android SDK filter para sa paglilimita ng haba at pagbabago ng rehistro.
  • Custom na mga filter ay ginagawa sa pamamagitan ng pagpapatupad ng InputFilter interface na may arbitrary na logic ng pagsusuri ng karakter.
  • Kadena ng filter ay nagbibigay-daan sa pagsasama ng maraming patakaran na isinasagawa nang sunud-sunod.
  • InputFilter at TextWatcher hindi nagkakasalungatan, kundi nagpupuno sa isa't isa.
  • Programmatic na pagbabago ng teksto sa pamamagitan ng setText() ay hindi dumadaan sa InputFilter.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din