TextInputLayout: ano ito, Material Design at pag-configure sa Android

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

TextInputLayout — ay isang component mula sa Material Components library para sa Android na bumabalot sa EditText at nagdaragdag ng mga advanced na kakayahan para sa pag-input ng teksto. Ang pangunahing function ng TextInputLayout ay ang lumulutang na label (floating label), na tumataas sa ibabaw ng field kapag nagta-type, nakakatipid ng espasyo at nagpapabuti ng pagiging madaling mabasa. Dagdag pa, sinusuportahan ng component ang pagpapakita ng mga mensahe ng error, mga icon sa loob ng field, character counter, at iba't ibang istilo ng pagpapakita. Ayon sa Material Design Guidelines (2025), ang TextInputLayout ay ang inirerekomendang paraan ng paggawa ng mga text field sa Android application na sumusunod sa mga pamantayan ng Material Design 3.

Mga Pangunahing Punto

  • TextInputLayout — balot para sa EditText mula sa Material Components na may floating label.
  • Floating label — label ay tumataas sa ibabaw ng field kapag nagta-type, nakakatipid ng espasyo sa screen.
  • Error — built-in na pagpapakita ng mga mensahe ng error sa ilalim ng input field.
  • Icon — suporta para sa kaliwa at kanang icon para sa mga aksyon (ipakita ang password, linisin).
  • Istilo — dalawang pangunahing istilo: FilledBox at OutlinedBox, pati na rin ang mga custom na tema.

Ano ang TextInputLayout sa Android

TextInputLayout — ay isang ViewGroup mula sa package na com.google.android.material.textfield na nagpapalawak ng LinearLayout at naglalaman ng EditText sa loob. Ang component ay bahagi ng Material Components library para sa Android, simula sa bersyon 1.0.0. Ang pangunahing gawain ng TextInputLayout ay magbigay ng handa nang implementasyon ng Material Design Text Fields na may minimal na pagsisikap mula sa developer.

Hindi tulad ng karaniwang EditText, pinamamahalaan ng TextInputLayout ang animation ng lumulutang na label, na itinatakda sa pamamagitan ng android:hint attribute ng panloob na EditText. Kapag walang laman ang field, ang label ay ipinapakita sa loob ng field bilang isang ordinaryong hint. Sa sandaling magsimulang mag-type ang user, ang label ay gumagalaw na may animation sa itaas na bahagi ng field, lumiliit ang laki. Ayon sa Material Design Guidelines (2025), ang ganitong animation ay nagpapabuti sa persepsyon ng form, dahil palaging nakikita ng user ang pangalan ng field, kahit matapos mag-input ng data.

Sa arkitektura, ang TextInputLayout ay nag-iimplementa ng pattern ng dekorador: ina-intercept nito ang mga event ng EditText, pinamamahalaan ang pagpapakita ng mga karagdagang elemento (label, error, icon, counter) at ini-koordina ang kanilang animation. Ang panloob na EditText ay naa-access sa pamamagitan ng getEditText() method at maaaring i-configure gamit ang mga standard attribute, kabilang ang inputType, maxLines at hint.

xml
<!-- Basic TextInputLayout markup -->
@+id/tilEmail
android:layout_width="match_parent"
android:layout_height="wrap_content">

    @+id/etEmail
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Email"
    android:inputType="textEmailAddress" />

</com.google.android.material.textfield.TextInputLayout>

Floating label at ang pag-configure nito

Floating label (lumulutang na label) — ay ang pangunahing kakayahan ng TextInputLayout. Kapag walang laman ang field, ang teksto mula sa android:hint ay ipinapakita sa loob ng EditText bilang ordinaryong hint. Kapag nakakuha ng focus o kapag nagta-type ng teksto, ang label ay tumataas sa itaas na bahagi ng TextInputLayout, lumiliit ang laki ng font at nagbabago ng kulay. Ang pag-uugaling ito ay lumulutas sa problema ng hindi pagkikita ng hint pagkatapos magsimula ng pag-type.

Ang pag-configure ng floating label ay ginagawa sa pamamagitan ng mga attribute ng TextInputLayout: app:hintEnabled ay tumutukoy kung ang lumulutang na label ay naka-enable (default true), app:hintAnimationEnabled ay nag-e-enable o nagdi-disable ng transition animation, app:expandedHintEnabled ay nagpapahintulot sa pagpapakita ng label kahit walang laman ang field at walang focus. Ang kulay ng label sa iba't ibang estado ay pinamamahalaan sa pamamagitan ng mga istilong colorPrimary at colorControlHighlight.

Ayon sa Google Material Components Team (2025), ang floating label ay lalong kapaki-pakinabang sa mga form na may maraming field, kung saan maaaring makalimutan ng user ang pangalan ng field pagkatapos magsimulang mag-type. Hindi tulad ng simpleng android:hint na nawawala kapag nagta-type, ang floating label ay nananatiling laging nakikita, nagbibigay ng konteksto para sa bawat field.

AttributePaglalarawanDefault
hintEnabledNag-e-enable o nagdi-disable ng lumulutang na labeltrue
hintAnimationEnabledNag-e-enable ng animation ng pagtaas/pagbaba ng labeltrue
expandedHintEnabledIpinapakita ang label kahit walang laman ang field at walang focusfalse
hintTextAppearanceIstilo ng teksto ng lumulutang na labelTema ng application

Pagpapakita ng error sa TextInputLayout

TextInputLayout ay nagbibigay ng built-in na sistema ng pagpapakita ng error na biswal na isinama sa input field. Kapag nagtatakda ng error sa pamamagitan ng error method, itinatampok ng component ang field (ang kulay ng linya o border ay nagiging pula) at ipinapakita ang teksto ng error sa ilalim ng field. Pinapalitan nito ang pangangailangan para sa isang hiwalay na TextView para sa mga mensahe ng error.

Ang pamamahala ng pagpapakita ng error ay ginagawa sa pamamagitan ng mga pamamaraang setError(CharSequence) at setErrorEnabled(boolean). Kapag tinawag ang setError na may teksto, ang error ay ipinapakita agad; kapag tinawag ang setError(null) — itinatago. Sinusuportahan din ng TextInputLayout ang custom na icon ng error sa pamamagitan ng attribute na app:errorIconDrawable at pamamahala ng kulay ng error sa pamamagitan ng app:errorTextColor.

Ayon sa Material Design Guidelines (2025), ang mga mensahe ng error ay dapat na tiyak at kapaki-pakinabang: sa halip na "Hindi wastong input" ay isulat "Ang email ay dapat maglaman ng @". Ang pagpapakita ng error ay dapat mangyari pagkatapos ng pag-input (pagkatapos mawala ang focus o pagkatapos ipadala ang form), hindi sa real-time — binabawasan nito ang stress ng user kapag pinupunan ang form.

kotlin
// Programatikong pag-setup ng error
textInputLayout.error = "Password min 8 chars"

// Pagtatago ng error
textInputLayout.error = null

// Pag-check at pag-set ng error sa validation
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

Mga icon at aksyon ng TextInputLayout

TextInputLayout ay sumusuporta sa pagpapakita ng mga icon pareho sa simula ng field (start icon) at sa dulo (end icon). Ang mga icon ay maaaring gumanap ng iba't ibang function: pagpapalit ng visibility ng password, paglilinis ng field, custom na aksyon. Ang bawat uri ng icon ay pinamamahalaan ng isang hiwalay na attribute at maaaring palitan ng custom na icon sa pamamagitan ng attribute na app:startIconDrawable o app:endIconDrawable.

End icon mode ay itinatakda sa pamamagitan ng attribute na app:endIconMode, na maaaring kumuha ng mga value: password_toggle — pagpapalit ng visibility ng password, clear_text — paglilinis ng field, dropdown_menu — arrow para sa dropdown menu, custom — custom na icon. Para sa password_toggle, awtomatikong pinamamahalaan ng TextInputLayout ang pagpapalit ng inputType sa pagitan ng textPassword at textVisiblePassword, at nag-a-animate din ng icon ng mata.

  • password_toggle — icon ng mata para sa pagpapakita/pagtatago ng password, built-in na animation.
  • clear_text — krus para sa paglilinis ng field, lumilitaw kapag may teksto.
  • dropdown_menu — arrow para sa Exposed Dropdown Menu (Material Design 3).
  • custom — anumang custom na icon na may paghawak sa pamamagitan ng setEndIconOnClickListener.
xml
<!-- TextInputLayout with password toggle icon -->
@+id/tilPassword
android:layout_width="match_parent"
app:endIconMode="password_toggle"
app:passwordToggleTint="@color/primary">

    @+id/etPassword
    android:inputType="textPassword" />

</com.google.android.material.textfield.TextInputLayout>

Mga istilo ng TextInputLayout: FilledBox at OutlinedBox

Ang Material Components para sa Android ay nagbibigay ng dalawang pangunahing istilo para sa TextInputLayout: FilledBox (napuno) at OutlinedBox (may outline). Ang istilong FilledBox ay may kulay na background at linya sa ilalim ng field na nagbabago ng kulay kapag nakatutok. Ang istilong OutlinedBox ay may transparent na background at outline sa paligid ng buong field, na lumilikha ng mas malinaw na mga hangganan at mas angkop para sa mga form na may maraming field.

Ang pagpili ng istilo ay depende sa disenyo ng application: FilledBox ay inirerekomenda para sa madalas na ginagamit na mga form, dahil nakakaakit ito ng mas kaunting pansin sa mga indibidwal na field. OutlinedBox ay mas gusto para sa mga maikling form (login, registration), kung saan ang bawat field ay dapat na malinaw na minarkahan. Ang istilo ay itinatakda sa pamamagitan ng style attribute sa XML o sa pamamagitan ng tema ng application.

KatangianFilledBoxOutlinedBox
BackgroundPunuan ng kulay (karaniwang kulay abo)Transparent
HanggananLinya sa ilalimOutline sa paligid ng field
FocusLinya ay lumapot at nagbabago ng kulayOutline ay nagbabago ng kulay at lumapot
RekomendasyonMga form na may madalas na inputMga maikling form, diin sa mga field
IstiloWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

Ang Material Design 3 (M3) ay nagpakilala ng mga na-update na istilo para sa TextInputLayout na may pinahusay na typography, mga bagong color token, at suporta para sa mga dynamic na kulay ng Material You. Sa M3, ang OutlinedBox ay naging inirerekomendang default na istilo, at ang FilledBox ay nag-adjust ng mga spacing at rounding radius upang tumugma sa bagong specifikasyon.

Mga halimbawa ng code na may TextInputLayout

Isang kumpletong halimbawa ng implementasyon ng registration form na may TextInputLayout, kabilang ang validation ng email at password, pagpapakita ng error, at icon ng pagpapakita ng password. Kapag pinindot ang registration button, lahat ng field ay sinusuri at ang mga kaukulang mensahe ng error ay ipinapakita.

XML markup ng registration form

xml
@+id/tilName
app:boxBackgroundMode="outlined">
    @+id/etName
    android:hint="Name" />
</...TextInputLayout>

@+id/tilRegEmail
app:boxBackgroundMode="outlined">
    @+id/etRegEmail
    android:hint="Email"
    android:inputType="textEmailAddress" />
</...TextInputLayout>

@+id/tilRegPassword
app:boxBackgroundMode="outlined"
app:endIconMode="password_toggle">
    @+id/etRegPassword
    android:hint="Password"
    android:inputType="textPassword" />
</...TextInputLayout>

Validation ng form sa Kotlin

kotlin
private fun validateForm(): Boolean {
    var isValid = true

    if (etName.text.isNullOrBlank()) {
        tilName.error = "Enter your name"
        isValid = false
    } else {
        tilName.error = null
    }

    val email = etRegEmail.text.toString()
    if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        tilRegEmail.error = "Invalid email format"
        isValid = false
    } else {
        tilRegEmail.error = null
    }

    val password = etRegPassword.text.toString()
    if (password.length < 8) {
        tilRegPassword.error = "Password min 8 chars"
        isValid = false
    } else {
        tilRegPassword.error = null
    }

    return isValid
}

Mga Madalas Itanong

Anong bersyon ng Material Components ang kailangan para sa TextInputLayout?

TextInputLayout ay available simula sa bersyon 1.0.0 ng com.google.android.material library. Para sa mga Material Design 3 na kakayahan gamitin ang bersyon 1.6.0 pataas. Koneksyon: implementation "com.google.android.material:material:1.12.0" sa build.gradle ng module.

Paano baguhin ang kulay ng lumulutang na label kapag nakatutok?

Ang kulay ng lumulutang na label sa estado ng focus ay pinamamahalaan ng attribute na app:hintTextColor o sa pamamagitan ng tema gamit ang colorPrimary. Para sa iba't ibang estado (focus, error, disabled) gumamit ng selector sa res/color/ o mga attribute na boxStrokeColor, errorTextColor mula sa Material Components library.

Paano magdagdag ng character counter sa TextInputLayout?

Itakda ang attribute na app:counterEnabled="true" at tukuyin ang maximum na bilang ng mga character sa pamamagitan ng app:counterMaxLength="100". Awtomatikong magpapakita ang TextInputLayout ng counter sa ilalim ng field (hal. "25/100"). Ang kulay ng counter ay maaaring i-configure sa pamamagitan ng app:counterTextColor at app:counterOverflowTextColor para sa paglampas sa limit.

Ano ang pagkakaiba sa pagitan ng mga istilong FilledBox at OutlinedBox?

FilledBox — may kulay na background, diin sa ilalim na linya. Kumukuha ng mas kaunting visual space. OutlinedBox — transparent na background na may outline sa paligid ng field, mas nakikitang mga hangganan. Ang FilledBox ay inirerekomenda para sa madalas na ginagamit na field, ang OutlinedBox para sa mga maikling form kung saan mahalaga ang kalinawan ng bawat field.

Maaari bang gamitin ang TextInputLayout nang walang Floating Label?

Oo, itakda ang attribute na app:hintEnabled="false" upang huwag paganahin ang lumulutang na label. Sa kasong ito, ang TextInputLayout ay gagana bilang isang ordinaryong balot para sa EditText, pinapanatili ang functionality ng error, icon, at character counter, ngunit walang label animation. Kapaki-pakinabang para sa mga field kung saan hindi kailangan ang hint o gumagamit ng custom na label.

Buod

  • TextInputLayout — balot para sa EditText mula sa Material Components na may floating label, error, at icon.
  • Floating label lumulutas sa problema ng pagtatago ng hint kapag nagta-type — label ay tumataas at nananatiling nakikita.
  • Error ay ipinapakita sa ilalim ng field na may pulang highlight ng border, walang hiwalay na TextView.
  • Icon endIconMode ay sumusuporta sa password_toggle, clear_text, dropdown_menu at custom.
  • Mga istilong FilledBox at OutlinedBox — dalawang pangunahing variant ng hitsura ng input field.
  • Character counter ay na-activate sa pamamagitan ng counterEnabled at counterMaxLength.
  • Material Design 3 ay nagdaragdag ng mga dynamic na kulay ng Material You at mga na-update na istilong OutlinedBox.

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