TextInputLayout: यह क्या है, Material Design और Android में सेटअप

लेखक: IT Sectr प्रकाशित: 2026-07-07 पढ़ने का समय: 9 मिनट

TextInputLayout Android के लिए Material Components लाइब्रेरी का एक घटक है जो EditText को रैप करता है और टेक्स्ट इनपुट के लिए उन्नत क्षमताएं जोड़ता है। TextInputLayout का मुख्य कार्य फ्लोटिंग लेबल (floating label) है, जो टेक्स्ट दर्ज करने पर फ़ील्ड के ऊपर उठ जाता है, जगह बचाता है और पढ़ने में सुधार करता है। इसके अतिरिक्त, घटक त्रुटि संदेश प्रदर्शित करने, फ़ील्ड के अंदर आइकन, एक कैरेक्टर काउंटर और विभिन्न स्टाइलिंग विकल्पों का समर्थन करता है। Material Design Guidelines (2025) के अनुसार, TextInputLayout Material Design 3 मानकों के अनुरूप Android ऐप्स में टेक्स्ट फ़ील्ड बनाने का अनुशंसित तरीका है।

मुख्य बिंदु

  • TextInputLayout — फ्लोटिंग लेबल के साथ Material Components से EditText के लिए रैपर।
  • फ्लोटिंग लेबल — टेक्स्ट दर्ज करने पर लेबल फ़ील्ड के ऊपर उठ जाता है, स्क्रीन स्थान बचाता है।
  • त्रुटियां — इनपुट फ़ील्ड के नीचे त्रुटि संदेशों का अंतर्निर्मित प्रदर्शन।
  • आइकन — क्रियाओं के लिए प्रारंभ और अंत आइकन का समर्थन (पासवर्ड दिखाएं, साफ़ करें)।
  • शैलियां — दो मुख्य शैलियां: FilledBox और OutlinedBox, साथ ही कस्टम थीम।

Android में TextInputLayout क्या है

TextInputLayout com.google.android.material.textfield पैकेज से एक ViewGroup है जो LinearLayout का विस्तार करता है और अपने अंदर एक EditText रखता है। यह घटक Android के लिए Material Components लाइब्रेरी का हिस्सा है, संस्करण 1.0.0 से शुरू। TextInputLayout का मुख्य उद्देश्य डेवलपर की ओर से न्यूनतम प्रयास के साथ Material Design टेक्स्ट फ़ील्ड का तैयार कार्यान्वयन प्रदान करना है।

एक मानक EditText के विपरीत, TextInputLayout फ्लोटिंग लेबल की एनिमेशन का प्रबंधन करता है, जो आंतरिक EditText के android:hint विशेषता के माध्यम से सेट किया जाता है। जब फ़ील्ड खाली होता है, तो लेबल फ़ील्ड के अंदर एक सामान्य संकेत के रूप में दिखाई देता है। जैसे ही उपयोगकर्ता टाइप करना शुरू करता है, लेबल एनिमेटेड रूप से फ़ील्ड के शीर्ष पर चला जाता है, आकार में छोटा हो जाता है। Material Design Guidelines (2025) के अनुसार, यह एनिमेशन फॉर्म की धारणा में सुधार करता है क्योंकि उपयोगकर्ता डेटा दर्ज करने के बाद भी हमेशा फ़ील्ड का नाम देखता है।

आर्किटेक्चर की दृष्टि से, TextInputLayout डेकोरेटर पैटर्न लागू करता है: यह EditText की घटनाओं को इंटरसेप्ट करता है, अतिरिक्त तत्वों (लेबल, त्रुटि, आइकन, काउंटर) के प्रदर्शन का प्रबंधन करता है, और उनकी एनिमेशन का समन्वय करता है। आंतरिक EditText getEditText() विधि के माध्यम से सुलभ है और इसे inputType, maxLines और 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) TextInputLayout की मुख्य विशेषता है। जब फ़ील्ड खाली होता है, तो android:hint का टेक्स्ट EditText के अंदर एक सामान्य प्लेसहोल्डर के रूप में प्रदर्शित होता है। जब फ़ील्ड फोकस प्राप्त करता है या टेक्स्ट दर्ज किया जाता है, तो लेबल TextInputLayout के शीर्ष पर उठ जाता है, फ़ॉन्ट आकार कम करता है और रंग बदलता है। यह व्यवहार उपयोगकर्ता के टाइप करना शुरू करने के बाद संकेत के अदृश्य होने की समस्या को हल करता है।

फ्लोटिंग लेबल का कॉन्फ़िगरेशन TextInputLayout विशेषताओं के माध्यम से किया जाता है: app:hintEnabled निर्धारित करता है कि फ्लोटिंग लेबल सक्षम है या नहीं (डिफ़ॉल्ट true), app:hintAnimationEnabled संक्रमण एनिमेशन को सक्षम या अक्षम करता है, app:expandedHintEnabled फ़ील्ड के खाली और फोकस में न होने पर भी लेबल प्रदर्शित करने की अनुमति देता है। विभिन्न अवस्थाओं में लेबल का रंग colorPrimary और colorControlHighlight शैलियों के माध्यम से प्रबंधित किया जाता है।

Google Material Components Team (2025) के अनुसार, फ्लोटिंग लेबल विशेष रूप से कई फ़ील्ड वाले फॉर्म में उपयोगी है, जहां उपयोगकर्ता टाइप करना शुरू करने के बाद फ़ील्ड का नाम भूल सकता है। एक साधारण android:hint के विपरीत जो इनपुट पर गायब हो जाता है, फ्लोटिंग लेबल हर समय दृश्यमान रहता है, प्रत्येक फ़ील्ड के लिए संदर्भ प्रदान करता है।

विशेषताविवरणडिफ़ॉल्ट
hintEnabledफ्लोटिंग लेबल को सक्षम या अक्षम करता हैtrue
hintAnimationEnabledलेबल उठने/गिरने की एनिमेशन सक्षम करता हैtrue
expandedHintEnabledफ़ील्ड खाली और बिना फोकस होने पर भी लेबल दिखाता हैfalse
hintTextAppearanceफ्लोटिंग लेबल टेक्स्ट शैलीऐप थीम

TextInputLayout में त्रुटि प्रदर्शन

TextInputLayout एक अंतर्निर्मित त्रुटि प्रदर्शन प्रणाली प्रदान करता है जो इनपुट फ़ील्ड के साथ दृष्टिगत रूप से एकीकृत है। जब setError विधि के माध्यम से त्रुटि सेट की जाती है, तो घटक फ़ील्ड को हाइलाइट करता है (लाइन या आउटलाइन का रंग लाल हो जाता है) और फ़ील्ड के नीचे त्रुटि टेक्स्ट प्रदर्शित करता है। यह त्रुटि संदेशों के लिए अलग TextView की आवश्यकता को समाप्त करता है।

त्रुटि प्रदर्शन का प्रबंधन setError(CharSequence) और setErrorEnabled(boolean) विधियों के माध्यम से किया जाता है। टेक्स्ट के साथ setError कॉल करने पर त्रुटि तुरंत दिखाई देती है; setError(null) कॉल करने पर यह छिप जाती है। TextInputLayout app:errorIconDrawable विशेषता के माध्यम से कस्टम त्रुटि आइकन और app:errorTextColor के माध्यम से त्रुटि रंग प्रबंधन का भी समर्थन करता है।

Material Design Guidelines (2025) के अनुसार, त्रुटि संदेश विशिष्ट और सहायक होने चाहिए: “अमान्य इनपुट” के बजाय “ईमेल में @ होना चाहिए” लिखें। त्रुटि प्रदर्शन इनपुट पूरा होने के बाद होना चाहिए (फोकस खोने पर या फॉर्म सबमिट करने के बाद), रीयल-टाइम में नहीं — इससे फॉर्म भरते समय उपयोगकर्ता का तनाव कम होता है।

kotlin
// प्रोग्रामेटिक रूप से त्रुटि सेटअप
textInputLayout.error = "Password min 8 chars"

// त्रुटि छिपाना
textInputLayout.error = null

// सत्यापन त्रुटि जांच और सेट
if (email.isNullOrBlank()) {
    tilEmail.error = "Email is required"
} else {
    tilEmail.error = null
}

TextInputLayout में आइकन और क्रियाएं

TextInputLayout फ़ील्ड की शुरुआत (start icon) और अंत (end icon) दोनों पर आइकन प्रदर्शित करने का समर्थन करता है। आइकन विभिन्न कार्य कर सकते हैं: पासवर्ड दृश्यता टॉगल करना, फ़ील्ड साफ़ करना, कस्टम क्रियाएं। प्रत्येक आइकन प्रकार एक अलग विशेषता द्वारा नियंत्रित होता है और app:startIconDrawable या app:endIconDrawable विशेषता के माध्यम से कस्टम से बदला जा सकता है।

एंड आइकन मोड app:endIconMode विशेषता के माध्यम से सेट किया जाता है, जो निम्न मान ले सकता है: password_toggle — पासवर्ड दृश्यता टॉगल करना, clear_text — फ़ील्ड साफ़ करना, dropdown_menu — ड्रॉपडाउन सूची के लिए तीर, custom — कस्टम आइकन। password_toggle के लिए, TextInputLayout स्वचालित रूप से inputType को textPassword और textVisiblePassword के बीच स्विच करता है, और आंख के आइकन को एनिमेट भी करता है।

  • password_toggle — पासवर्ड दिखाने/छिपाने के लिए आंख का आइकन, अंतर्निर्मित एनिमेशन।
  • clear_text — फ़ील्ड साफ़ करने के लिए क्रॉस आइकन, टेक्स्ट होने पर दिखाई देता है।
  • dropdown_menu — Exposed Dropdown Menu (Material Design 3) के लिए तीर।
  • custom — 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>

TextInputLayout शैलियां: FilledBox और OutlinedBox

Android के लिए Material Components TextInputLayout के लिए दो मुख्य शैलियां प्रदान करता है: FilledBox (भरा हुआ) और OutlinedBox (सीमा सहित)। FilledBox शैली में रंगीन पृष्ठभूमि और फ़ील्ड के नीचे एक रेखा होती है जो फोकस करने पर रंग बदलती है। OutlinedBox शैली में पारदर्शी पृष्ठभूमि और पूरे फ़ील्ड के चारों ओर एक सीमा होती है, जो स्पष्ट सीमाएं बनाती है और कई फ़ील्ड वाले फॉर्म के लिए बेहतर उपयुक्त होती है।

शैली का चुनाव ऐप डिज़ाइन पर निर्भर करता है: FilledBox बार-बार उपयोग किए जाने वाले फॉर्म के लिए अनुशंसित है क्योंकि यह अलग-अलग फ़ील्ड पर कम ध्यान आकर्षित करता है। OutlinedBox छोटे फॉर्म (लॉगिन, रजिस्ट्रेशन) के लिए प्राथमिकता है जहां प्रत्येक फ़ील्ड स्पष्ट रूप से चिह्नित होनी चाहिए। शैली XML में style विशेषता या ऐप थीम के माध्यम से सेट की जाती है।

विशेषताFilledBoxOutlinedBox
पृष्ठभूमिरंग भराव (आमतौर पर ग्रे)पारदर्शी
सीमानीचे रेखाफ़ील्ड के चारों ओर सीमा
फोकसरेखा मोटी होती है और रंग बदलती हैसीमा रंग बदलती है और मोटी होती है
अनुशंसाबार-बार इनपुट वाले फॉर्मछोटे फॉर्म, फ़ील्ड पर जोर
शैलीWidget.MaterialComponents.TextInputLayout.FilledBoxWidget.MaterialComponents.TextInputLayout.OutlinedBox

Material Design 3 (M3) ने TextInputLayout के लिए बेहतर टाइपोग्राफी, नए रंग टोकन और Material You डायनामिक रंगों के समर्थन के साथ अद्यतन शैलियां पेश कीं। M3 में, OutlinedBox डिफ़ॉल्ट रूप से अनुशंसित शैली बन गया, और FilledBox ने नई विशिष्टता से मेल खाने के लिए अपने पैडिंग और बॉर्डर रेडियस को अनुकूलित किया।

TextInputLayout के साथ कोड उदाहरण

TextInputLayout के साथ रजिस्ट्रेशन फॉर्म को लागू करने का एक पूर्ण उदाहरण, जिसमें ईमेल और पासवर्ड सत्यापन, त्रुटि प्रदर्शन और पासवर्ड दिखाने का आइकन शामिल है। रजिस्ट्रेशन बटन दबाने पर, सभी फ़ील्ड की जाँच की जाती है और संबंधित त्रुटि संदेश प्रदर्शित किए जाते हैं।

रजिस्ट्रेशन फॉर्म का XML लेआउट

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>

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
}

अक्सर पूछे जाने वाले प्रश्न

TextInputLayout के लिए Material Components के किस संस्करण की आवश्यकता है?

TextInputLayout com.google.android.material लाइब्रेरी के संस्करण 1.0.0 से उपलब्ध है। Material Design 3 सुविधाओं के लिए, संस्करण 1.6.0 और उससे ऊपर का उपयोग करें। मॉड्यूल build.gradle में implementation “com.google.android.material:material:1.12.0” शामिल करें।

फोकस पर फ्लोटिंग लेबल का रंग कैसे बदलें?

फोकस अवस्था में फ्लोटिंग लेबल का रंग app:hintTextColor विशेषता या colorPrimary का उपयोग करके थीम के माध्यम से नियंत्रित किया जाता है। विभिन्न अवस्थाओं (फोकस, त्रुटि, निष्क्रिय) के लिए, res/color/ में सेलेक्टर या Material Components लाइब्रेरी से boxStrokeColor, errorTextColor विशेषताओं का उपयोग करें।

TextInputLayout में कैरेक्टर काउंटर कैसे जोड़ें?

app:counterEnabled=“true” विशेषता सेट करें और app:counterMaxLength=“100” के माध्यम से अधिकतम कैरेक्टर संख्या निर्दिष्ट करें। TextInputLayout स्वचालित रूप से फ़ील्ड के नीचे काउंटर प्रदर्शित करेगा (जैसे, “25/100”)। काउंटर का रंग app:counterTextColor और सीमा से अधिक होने पर app:counterOverflowTextColor के माध्यम से कॉन्फ़िगर किया जा सकता है।

FilledBox और OutlinedBox शैलियों में क्या अंतर है?

FilledBox — पृष्ठभूमि रंग से भरी हुई, नीचे की रेखा पर जोर। कम दृश्य स्थान लेता है। OutlinedBox — फ़ील्ड के चारों ओर सीमा के साथ पारदर्शी पृष्ठभूमि, अधिक दृश्यमान सीमाएं। FilledBox बार-बार इनपुट फ़ील्ड के लिए अनुशंसित है, OutlinedBox छोटे फॉर्म के लिए जहां प्रत्येक फ़ील्ड की स्पष्टता महत्वपूर्ण है।

क्या TextInputLayout का उपयोग फ्लोटिंग लेबल के बिना किया जा सकता है?

हां, फ्लोटिंग लेबल को अक्षम करने के लिए app:hintEnabled=“false” विशेषता सेट करें। इस मामले में, TextInputLayout EditText के लिए एक सामान्य रैपर के रूप में काम करेगा, त्रुटि, आइकन और कैरेक्टर काउंटर कार्यक्षमता को बनाए रखेगा, लेकिन लेबल एनिमेशन के बिना। उन फ़ील्ड के लिए उपयोगी जहां संकेत की आवश्यकता नहीं है या कस्टम लेबल का उपयोग किया जाता है।

सारांश

  • TextInputLayout — Material Components से EditText के लिए रैपर जो फ्लोटिंग लेबल, त्रुटियां और आइकन प्रदान करता है।
  • फ्लोटिंग लेबल इनपुट पर संकेत छिपने की समस्या हल करता है — लेबल उठता है और दृश्यमान रहता है।
  • त्रुटियां फ़ील्ड के नीचे लाल सीमा हाइलाइटिंग के साथ प्रदर्शित होती हैं, बिना अलग TextView के।
  • आइकन endIconMode password_toggle, clear_text, dropdown_menu और custom का समर्थन करता है।
  • FilledBox और OutlinedBox शैलियां — इनपुट फ़ील्ड डिज़ाइन के दो मुख्य विकल्प।
  • कैरेक्टर काउंटर counterEnabled और counterMaxLength के माध्यम से सक्रिय किया जाता है।
  • Material Design 3 Material You डायनामिक रंग और अद्यतन OutlinedBox शैलियां जोड़ता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें