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 استعمال کیا جاتا ہے۔ تاہم، کچھ منظرناموں (فوری دستی تاریخ اندراج) میں، یہ کلاس مفید ہو سکتی ہے۔ اس کے پاس کوئی مخصوص کی بورڈ نہیں ہے اور یہ عام طور پر ایک عددی کی بورڈ دکھاتا ہے۔
ہر ان پٹ کلاس کو تغیرات (بٹ 5–7 میں مخصوص ذیلی اقسام) کے ساتھ جوڑا جا سکتا ہے۔ مثال کے طور پر، TYPE_TEXT_VARIATION_PASSWORD (بٹ 5) TEXT کلاس میں پوشیدہ ان پٹ شامل کرتا ہے۔ تغیر کے بٹس: 0x000000E0 (TYPE_MASK_VARIATION ماسک)۔
موڈیفائر جھنڈے (بٹ 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں