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 মাস্ক)।
মডিফায়ার ফ্ল্যাগ 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন