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 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.
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.
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.
| Filter | Layunin | Halimbawa ng paggamit |
|---|---|---|
| LengthFilter | Paglilimita ng haba ng teksto | Field ng pangalan hanggang 50 karakter |
| AllCaps | Conversion sa malalaking titik | Field ng postal code |
| Custom na InputFilter | Arbitrary na patakaran ng pagsasala | Mga numero lamang, bawal ang espesyal na karakter |
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.
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.
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.
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.
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.
| Kriterya | InputFilter | TextWatcher |
|---|---|---|
| Oras ng pagkilos | Bago ang pagbabago ng teksto | Pagkatapos ng pagbabago ng teksto |
| Layunin | Pagharang ng maling karakter | Reaksyon sa mga pagbabago, pagpapatunay, UI |
| Ibinabalik na halaga | Na-filter na teksto o null | Wala (void) |
| Paglalapat | setFilters() | addTextChangedListener() |
Mga Madalas Itanong
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.
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.
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.
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.
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
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.
Basahin din