TextInputLayout Android के लिए Material Components लाइब्रेरी का एक घटक है जो EditText को रैप करता है और टेक्स्ट इनपुट के लिए उन्नत क्षमताएं जोड़ता है। TextInputLayout का मुख्य कार्य फ्लोटिंग लेबल (floating label) है, जो टेक्स्ट दर्ज करने पर फ़ील्ड के ऊपर उठ जाता है, जगह बचाता है और पढ़ने में सुधार करता है। इसके अतिरिक्त, घटक त्रुटि संदेश प्रदर्शित करने, फ़ील्ड के अंदर आइकन, एक कैरेक्टर काउंटर और विभिन्न स्टाइलिंग विकल्पों का समर्थन करता है। Material Design Guidelines (2025) के अनुसार, TextInputLayout Material Design 3 मानकों के अनुरूप Android ऐप्स में टेक्स्ट फ़ील्ड बनाने का अनुशंसित तरीका है।
मुख्य बिंदु
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 सहित मानक विशेषताओं के साथ कॉन्फ़िगर किया जा सकता है।
<!-- 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 एक अंतर्निर्मित त्रुटि प्रदर्शन प्रणाली प्रदान करता है जो इनपुट फ़ील्ड के साथ दृष्टिगत रूप से एकीकृत है। जब setError विधि के माध्यम से त्रुटि सेट की जाती है, तो घटक फ़ील्ड को हाइलाइट करता है (लाइन या आउटलाइन का रंग लाल हो जाता है) और फ़ील्ड के नीचे त्रुटि टेक्स्ट प्रदर्शित करता है। यह त्रुटि संदेशों के लिए अलग TextView की आवश्यकता को समाप्त करता है।
त्रुटि प्रदर्शन का प्रबंधन setError(CharSequence) और setErrorEnabled(boolean) विधियों के माध्यम से किया जाता है। टेक्स्ट के साथ setError कॉल करने पर त्रुटि तुरंत दिखाई देती है; setError(null) कॉल करने पर यह छिप जाती है। TextInputLayout app:errorIconDrawable विशेषता के माध्यम से कस्टम त्रुटि आइकन और app:errorTextColor के माध्यम से त्रुटि रंग प्रबंधन का भी समर्थन करता है।
Material Design Guidelines (2025) के अनुसार, त्रुटि संदेश विशिष्ट और सहायक होने चाहिए: “अमान्य इनपुट” के बजाय “ईमेल में @ होना चाहिए” लिखें। त्रुटि प्रदर्शन इनपुट पूरा होने के बाद होना चाहिए (फोकस खोने पर या फॉर्म सबमिट करने के बाद), रीयल-टाइम में नहीं — इससे फॉर्म भरते समय उपयोगकर्ता का तनाव कम होता है।
// प्रोग्रामेटिक रूप से त्रुटि सेटअप
textInputLayout.error = "Password min 8 chars"
// त्रुटि छिपाना
textInputLayout.error = null
// सत्यापन त्रुटि जांच और सेट
if (email.isNullOrBlank()) {
tilEmail.error = "Email is required"
} else {
tilEmail.error = null
}
TextInputLayout फ़ील्ड की शुरुआत (start icon) और अंत (end icon) दोनों पर आइकन प्रदर्शित करने का समर्थन करता है। आइकन विभिन्न कार्य कर सकते हैं: पासवर्ड दृश्यता टॉगल करना, फ़ील्ड साफ़ करना, कस्टम क्रियाएं। प्रत्येक आइकन प्रकार एक अलग विशेषता द्वारा नियंत्रित होता है और app:startIconDrawable या app:endIconDrawable विशेषता के माध्यम से कस्टम से बदला जा सकता है।
एंड आइकन मोड app:endIconMode विशेषता के माध्यम से सेट किया जाता है, जो निम्न मान ले सकता है: password_toggle — पासवर्ड दृश्यता टॉगल करना, clear_text — फ़ील्ड साफ़ करना, dropdown_menu — ड्रॉपडाउन सूची के लिए तीर, custom — कस्टम आइकन। password_toggle के लिए, TextInputLayout स्वचालित रूप से inputType को textPassword और textVisiblePassword के बीच स्विच करता है, और आंख के आइकन को एनिमेट भी करता है।
<!-- 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>
Android के लिए Material Components TextInputLayout के लिए दो मुख्य शैलियां प्रदान करता है: FilledBox (भरा हुआ) और OutlinedBox (सीमा सहित)। FilledBox शैली में रंगीन पृष्ठभूमि और फ़ील्ड के नीचे एक रेखा होती है जो फोकस करने पर रंग बदलती है। OutlinedBox शैली में पारदर्शी पृष्ठभूमि और पूरे फ़ील्ड के चारों ओर एक सीमा होती है, जो स्पष्ट सीमाएं बनाती है और कई फ़ील्ड वाले फॉर्म के लिए बेहतर उपयुक्त होती है।
शैली का चुनाव ऐप डिज़ाइन पर निर्भर करता है: FilledBox बार-बार उपयोग किए जाने वाले फॉर्म के लिए अनुशंसित है क्योंकि यह अलग-अलग फ़ील्ड पर कम ध्यान आकर्षित करता है। OutlinedBox छोटे फॉर्म (लॉगिन, रजिस्ट्रेशन) के लिए प्राथमिकता है जहां प्रत्येक फ़ील्ड स्पष्ट रूप से चिह्नित होनी चाहिए। शैली XML में style विशेषता या ऐप थीम के माध्यम से सेट की जाती है।
| विशेषता | FilledBox | OutlinedBox |
|---|---|---|
| पृष्ठभूमि | रंग भराव (आमतौर पर ग्रे) | पारदर्शी |
| सीमा | नीचे रेखा | फ़ील्ड के चारों ओर सीमा |
| फोकस | रेखा मोटी होती है और रंग बदलती है | सीमा रंग बदलती है और मोटी होती है |
| अनुशंसा | बार-बार इनपुट वाले फॉर्म | छोटे फॉर्म, फ़ील्ड पर जोर |
| शैली | Widget.MaterialComponents.TextInputLayout.FilledBox | Widget.MaterialComponents.TextInputLayout.OutlinedBox |
Material Design 3 (M3) ने TextInputLayout के लिए बेहतर टाइपोग्राफी, नए रंग टोकन और Material You डायनामिक रंगों के समर्थन के साथ अद्यतन शैलियां पेश कीं। M3 में, OutlinedBox डिफ़ॉल्ट रूप से अनुशंसित शैली बन गया, और FilledBox ने नई विशिष्टता से मेल खाने के लिए अपने पैडिंग और बॉर्डर रेडियस को अनुकूलित किया।
TextInputLayout के साथ रजिस्ट्रेशन फॉर्म को लागू करने का एक पूर्ण उदाहरण, जिसमें ईमेल और पासवर्ड सत्यापन, त्रुटि प्रदर्शन और पासवर्ड दिखाने का आइकन शामिल है। रजिस्ट्रेशन बटन दबाने पर, सभी फ़ील्ड की जाँच की जाती है और संबंधित त्रुटि संदेश प्रदर्शित किए जाते हैं।
@+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>
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 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 विशेषताओं का उपयोग करें।
app:counterEnabled=“true” विशेषता सेट करें और app:counterMaxLength=“100” के माध्यम से अधिकतम कैरेक्टर संख्या निर्दिष्ट करें। TextInputLayout स्वचालित रूप से फ़ील्ड के नीचे काउंटर प्रदर्शित करेगा (जैसे, “25/100”)। काउंटर का रंग app:counterTextColor और सीमा से अधिक होने पर app:counterOverflowTextColor के माध्यम से कॉन्फ़िगर किया जा सकता है।
FilledBox — पृष्ठभूमि रंग से भरी हुई, नीचे की रेखा पर जोर। कम दृश्य स्थान लेता है। OutlinedBox — फ़ील्ड के चारों ओर सीमा के साथ पारदर्शी पृष्ठभूमि, अधिक दृश्यमान सीमाएं। FilledBox बार-बार इनपुट फ़ील्ड के लिए अनुशंसित है, OutlinedBox छोटे फॉर्म के लिए जहां प्रत्येक फ़ील्ड की स्पष्टता महत्वपूर्ण है।
हां, फ्लोटिंग लेबल को अक्षम करने के लिए app:hintEnabled=“false” विशेषता सेट करें। इस मामले में, TextInputLayout EditText के लिए एक सामान्य रैपर के रूप में काम करेगा, त्रुटि, आइकन और कैरेक्टर काउंटर कार्यक्षमता को बनाए रखेगा, लेकिन लेबल एनिमेशन के बिना। उन फ़ील्ड के लिए उपयोगी जहां संकेत की आवश्यकता नहीं है या कस्टम लेबल का उपयोग किया जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें