InputType एक Android विशेषता है जो टेक्स्ट फ़ील्ड के लिए इनपुट डेटा की प्रकृति और कीबोर्ड व्यवहार निर्धारित करती है। InputType मान एक बिटमास्क है जो इनपुट क्लास (टेक्स्ट, नंबर, फ़ोन, दिनांक) और मॉडिफ़ायर (मल्टीलाइन, ऑटोकरेक्ट, कैपिटल अक्षर, छिपा इनपुट) को जोड़ता है। InputType प्रदर्शित कीबोर्ड के प्रकार, इनपुट कैरेक्टर फ़िल्टरिंग और ऑटोफ़िल व्यवहार को प्रभावित करता है। Android Developers (2026) के अनुसार, InputType सही डेटा इनपुट सुनिश्चित करने के लिए सबसे महत्वपूर्ण विशेषताओं में से एक है और इसे प्रत्येक संपादन योग्य टेक्स्ट फ़ील्ड के लिए स्पष्ट रूप से सेट किया जाना चाहिए।
मुख्य बिंदु
InputType एक पूर्णांक स्थिरांक (Int) है जो टेक्स्ट फ़ील्ड के लिए इनपुट मोड को एन्कोड करता है। Android में, इसे android.text.InputType क्लास में परिभाषित किया गया है। InputType मान में दो भाग होते हैं: इनपुट क्लास (बिट 0–4) और मॉडिफ़ायर (बिट 5–31)। इनपुट क्लास मूल डेटा प्रकार को परिभाषित करता है — टेक्स्ट, नंबर, फ़ोन, दिनांक। मॉडिफ़ायर चयनित क्लास के भीतर व्यवहार को स्पष्ट करते हैं — उदाहरण के लिए, टेक्स्ट क्लास के लिए, आप ऑटोकरेक्ट, कैपिटल अक्षर या मल्टीलाइन इनपुट सक्षम कर सकते हैं।
InputType तंत्र तीन स्तरों पर काम करता है: Android फ्रेमवर्क स्तर पर, यह निर्धारित करता है कि कौन सा InputConnection बनाया जाएगा (EditText और IME के बीच कनेक्शन); IME (कीबोर्ड) स्तर पर, यह निर्दिष्ट करता है कि कौन से कैरेक्टर प्रदर्शित करने हैं और इनपुट को कैसे संभालना है; एप्लिकेशन स्तर पर, यह EditText में निर्मित InputFilter के माध्यम से कैरेक्टर फ़िल्टर करता है। Android Source Code (AOSP, 2026) के अनुसार, बिटमास्क को TextView.getInputType() विधि में संभाला जाता है, जो वर्तमान मान लौटाता है, और setInputType(), जो आंतरिक फ़िल्टर और IME कनेक्शन को पुनः कॉन्फ़िगर करता है।
InputType की एक महत्वपूर्ण विशेषता यह है कि इसे सुरक्षा कारणों से किसी अन्य प्रक्रिया से नहीं पढ़ा जा सकता। यह इनपुट प्रकार तक पहुँच के माध्यम से डेटा चोरी को रोकता है (उदाहरण के लिए, यह निर्धारित करना कि कोई फ़ील्ड पासवर्ड है या नहीं)। किसी अन्य एप्लिकेशन से InputType पढ़ने का प्रयास करने पर, डिफ़ॉल्ट रूप से TYPE_CLASS_TEXT लौटाया जाता है।
// मूल InputType स्थिरांक
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// क्लास निकालने के लिए मास्क
InputType.TYPE_MASK_CLASS // 0x0000000F
Android चार बुनियादी InputType क्लास परिभाषित करता है। प्रत्येक क्लास एक विशिष्ट डेटा श्रेणी से मेल खाती है और संबंधित कीबोर्ड प्रकार को सक्रिय करती है। क्लास बिटमास्क के बिट 0–4 में निर्दिष्ट की जाती है और इसे TYPE_MASK_CLASS (0x0F) मास्क के माध्यम से निकाला जा सकता है।
| क्लास | स्थिरांक | कीबोर्ड | उपयोग |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY कीबोर्ड | टेक्स्ट, टिप्पणियाँ, विवरण |
| NUMBER | TYPE_CLASS_NUMBER (2) | संख्यात्मक | मात्रा, मूल्य, आयु |
| PHONE | TYPE_CLASS_PHONE (3) | फ़ोन | फ़ोन नंबर |
| DATETIME | TYPE_CLASS_DATETIME (4) | दिनांक/समय | दिनांक, समय |
TYPE_CLASS_DATETIME का सीधे उपयोग शायद ही कभी किया जाता है — दिनांक इनपुट के लिए आमतौर पर टेक्स्ट फ़ील्ड के बजाय DatePicker या DatePickerDialog का उपयोग किया जाता है। हालांकि, कुछ परिदृश्यों (त्वरित मैन्युअल दिनांक प्रविष्टि) में, यह क्लास उपयोगी हो सकती है। इसके पास कोई विशेष कीबोर्ड नहीं है और यह आमतौर पर संख्यात्मक कीबोर्ड प्रदर्शित करता है।
प्रत्येक इनपुट क्लास को विविधताओं (variations) के साथ जोड़ा जा सकता है — बिट 5–7 में निर्दिष्ट उपप्रकार। उदाहरण के लिए, TYPE_TEXT_VARIATION_PASSWORD (बिट 5) TEXT क्लास में छिपा इनपुट जोड़ता है। विविधता बिट: 0x000000E0 (TYPE_MASK_VARIATION मास्क)।
मॉडिफ़ायर फ़्लैग InputType (बिट 8–31) बेस क्लास में अतिरिक्त क्षमताएँ जोड़ते हैं। वे कीबोर्ड प्रकार नहीं बदलते लेकिन इनपुट व्यवहार को संशोधित करते हैं। फ़्लैग प्रत्येक क्लास के लिए विशिष्ट होते हैं — TEXT फ़्लैग NUMBER के साथ काम नहीं करते, और इसके विपरीत। नीचे प्रत्येक क्लास के मुख्य मॉडिफ़ायर दिए गए हैं।
Android Developers Documentation (2026) के अनुसार, विभिन्न क्लास के फ़्लैग ओवरलैप नहीं होते — NUMBER के साथ TEXT फ़्लैग का उपयोग करने का प्रयास अनदेखा कर दिया जाएगा। सेट फ़्लैग की जाँच करने के लिए, बिटवाइज़ AND का उपयोग करें: (inputType and FLAG) != 0.
InputType क्लास और फ़्लैग का सही संयोजन उपयोगकर्ता-अनुकूल फ़ॉर्म बनाने की कुंजी है। आइए विशिष्ट परिदृश्यों और उनके संबंधित InputType कॉन्फ़िगरेशन को देखें। प्रत्येक परिदृश्य एक विशिष्ट डेटा प्रकार के लिए इनपुट को अनुकूलित करता है, जिससे फ़ॉर्म सहज और भरने में तेज़ हो जाता है।
| परिदृश्य | InputType | कीबोर्ड |
|---|---|---|
| नाम | textCapWords | QWERTY, प्रत्येक शब्द बड़े अक्षर से |
| ईमेल | textEmailAddress | QWERTY @ और . के साथ |
| पासवर्ड | textPassword | QWERTY, छिपा इनपुट |
| फ़ोन | phone | अंक +, #, * के साथ |
| मूल्य | numberDecimal | दशमलव बिंदु के साथ अंक |
| मात्रा | number | केवल अंक |
| टिप्पणी | textCapSentences|textMultiLine | QWERTY, मल्टीलाइन |
| खोज | text|textNoSuggestions | QWERTY बिना सुझाव |
// मूल्य फ़ील्ड के लिए संयोजन
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// टिप्पणी फ़ील्ड के लिए संयोजन
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
setInputType() के माध्यम से प्रोग्रामेटिक रूप से InputType सेट करना पिछले मान को ओवरराइट करता है। यदि आपको केवल मास्क का एक हिस्सा बदलने की आवश्यकता है (उदाहरण के लिए, एक फ़्लैग जोड़ना), तो आपको वर्तमान मान सहेजना होगा, उसे संशोधित करना होगा और वापस लागू करना होगा। setInputType() का प्रत्येक कॉल EditText के आंतरिक फ़िल्टर को पुनः कॉन्फ़िगर करता है।
setRawInputType() विधि setInputType से इस मायने में भिन्न है कि यह फ़िल्टर और सुझावों के पुनर्विन्यास को ट्रिगर नहीं करती। इसका उपयोग EditText स्थिति के पूर्ण पुनर्लोड के बिना InputType को अस्थायी रूप से बदलने के लिए किया जाता है। setInputType() को कॉल करने के बाद, कीबोर्ड को अपडेट करने के लिए IME को पुनरारंभ करने की अनुशंसा की जाती है।
// पासवर्ड और दृश्य टेक्स्ट के बीच टॉगल करें
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// कर्सर स्थिति रखें
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// इनपुट क्लास प्राप्त करें
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// इनपुट विविधता प्राप्त करें
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// जाँचें कि क्या पासवर्ड फ़ील्ड है
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
सही InputType चुनना न केवल UX के बारे में है बल्कि सुरक्षा और डेटा शुद्धता के बारे में भी है। मुख्य अनुशंसाओं में शामिल हैं: प्रत्येक EditText के लिए हमेशा एक स्पष्ट InputType निर्दिष्ट करें; यथासंभव सबसे विशिष्ट इनपुट क्लास का उपयोग करें; विभिन्न क्लास के फ़्लैग को संयोजित न करें; संवेदनशील डेटा फ़ील्ड के लिए PASSWORD विविधताओं का उपयोग करें; खोज फ़ील्ड के लिए imeOptions="actionSearch" का उपयोग करें।
InputType एक्सेसिबिलिटी सेवाओं (Accessibility) के संचालन को भी प्रभावित करता है। textPassword प्रकार वाले फ़ील्ड को स्क्रीन रीडर से अतिरिक्त सुरक्षा मिलती है — वे दर्ज किए गए कैरेक्टर को ज़ोर से नहीं पढ़ते। textEmailAddress फ़ील्ड के लिए, स्क्रीन रीडर उपयोगकर्ता को सूचित करता है कि फ़ील्ड ईमेल के लिए है और उपयुक्त सुझाव प्रदान करता है।
Material Design Guidelines (2025) के अनुसार, InputType उस डेटा प्रकार से मेल खाना चाहिए जो उपयोगकर्ता दर्ज कर रहा है। गलत InputType न केवल इनपुट को धीमा करता है बल्कि त्रुटियाँ भी पैदा कर सकता है: उदाहरण के लिए, यदि आप फ़ोन नंबर फ़ील्ड के लिए textMultiLine छोड़ते हैं, तो कीबोर्ड संख्यात्मक कीपैड नहीं दिखाएगा, और उपयोगकर्ता को हर बार मैन्युअल रूप से लेआउट बदलना होगा।
अक्सर पूछे जाने वाले प्रश्न
InputType एक EditText विशेषता है जो बिटमास्क के माध्यम से इनपुट डेटा के प्रकार को परिभाषित करती है। Keyboard Type एक अनौपचारिक नाम है InputType द्वारा सक्रिय दृश्य कीबोर्ड प्रकार के लिए। InputType कैरेक्टर फ़िल्टरिंग, ऑटोकरेक्ट और ऑटोकम्प्लीट को भी प्रभावित करता है — न केवल कीबोर्ड लेआउट।
editText.inputType = InputType.TYPE_CLASS_TEXT सेट करें या पूर्ण रीसेट के लिए स्थिरांक InputType.TYPE_NULL (0x00000000) का उपयोग करें। TYPE_NULL के साथ, फ़ोकस करने पर फ़ील्ड कीबोर्ड नहीं दिखाएगा। मानक टेक्स्ट इनपुट पर लौटने के लिए, बिना फ़्लैग के TYPE_CLASS_TEXT सेट करें।
आप नई InputType क्लास नहीं बना सकते, क्योंकि यह Android फ्रेमवर्क का हिस्सा है। हालांकि, आप वांछित व्यवहार प्राप्त करने के लिए मौजूदा क्लास और फ़्लैग को जोड़ सकते हैं। InputFilter के माध्यम से अतिरिक्त कैरेक्टर फ़िल्टरिंग लागू करें, जो setFilters() विधि के माध्यम से EditText पर सेट किया जाता है।
InputType InputConnection के माध्यम से इनपुट सिस्टम को भेजा जाता है। IME InputType क्लास और विविधता को पढ़ता है और संबंधित कीबोर्ड लेआउट का चयन करता है। उदाहरण के लिए, TYPE_CLASS_NUMBER के साथ TYPE_NUMBER_FLAG_DECIMAL कीबोर्ड को दशमलव बिंदु के साथ संख्यात्मक कीपैड दिखाने का कारण बनता है। अधिकांश आधुनिक कीबोर्ड इन अनुशंसाओं का पालन करते हैं।
Kotlin में editText.inputType प्रॉपर्टी या Java में editText.getInputType() का उपयोग करें। क्लास निकालने के लिए, मास्क लागू करें: inputType and InputType.TYPE_MASK_CLASS। किसी विशिष्ट फ़्लैग की जाँच करने के लिए: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — यदि परिणाम != 0 है, तो फ़्लैग सेट है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें