InputType — এটি কী, ইনপুট অ্যাট্রিবিউট এবং Android-এ সেগুলির কনফিগারেশন

লেখক: IT Sectr প্রকাশিত: 2026-07-07 পড়ার সময়: 9 মিনিট

InputType একটি Android অ্যাট্রিবিউট যা টেক্সট ফিল্ডের জন্য ইনপুট ডেটার প্রকৃতি এবং কীবোর্ডের আচরণ নির্ধারণ করে। InputType মান হল একটি বিটমাস্ক যা ইনপুট ক্লাস (টেক্সট, সংখ্যা, ফোন, তারিখ) এবং মডিফায়ার (মাল্টিলাইন, অটোকরেক্ট, বড় হাতের অক্ষর, লুকানো ইনপুট) একত্রিত করে। InputType প্রদর্শিত কীবোর্ডের ধরন, ইনপুট অক্ষর ফিল্টারিং এবং অটোফিল আচরণকে প্রভাবিত করে। Android Developers (2026) অনুসারে, InputType সঠিক ডেটা ইনপুট নিশ্চিত করার জন্য সবচেয়ে গুরুত্বপূর্ণ অ্যাট্রিবিউটগুলির মধ্যে একটি এবং প্রতিটি সম্পাদনাযোগ্য টেক্সট ফিল্ডের জন্য স্পষ্টভাবে সেট করা উচিত।

মূল বিষয়

  • InputType — একটি বিটমাস্ক যা EditText-এর জন্য ইনপুট ক্লাস এবং মডিফায়ার সংজ্ঞায়িত করে।
  • ইনপুট ক্লাস — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME।
  • মডিফায়ার — ফ্ল্যাগ যা আচরণ স্পষ্ট করে: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES।
  • একত্রিতকরণ — সঠিক কনফিগারেশনের জন্য ক্লাস এবং মডিফায়ার বিটওয়াইজ OR-এর মাধ্যমে একত্রিত হয়।
  • প্রভাব — সঠিক InputType ইনপুট দ্রুত করে, ত্রুটি হ্রাস করে এবং ফর্ম UX উন্নত করে।

Android-এ 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 ফেরত দেওয়া হয়।

kotlin
// মৌলিক 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

InputType ক্লাস: TEXT, NUMBER, PHONE, DATETIME

Android চারটি মৌলিক InputType ক্লাস সংজ্ঞায়িত করে। প্রতিটি ক্লাস একটি নির্দিষ্ট ডেটা বিভাগের সাথে মিলে যায় এবং সংশ্লিষ্ট কীবোর্ড টাইপ সক্রিয় করে। ক্লাসটি বিটমাস্কের বিট 0–4-এ নির্দিষ্ট করা হয় এবং TYPE_MASK_CLASS (0x0F) মাস্কের মাধ্যমে বের করা যায়।

ক্লাসধ্রুবককীবোর্ডব্যবহার
TEXTTYPE_CLASS_TEXT (1)QWERTY কীবোর্ডটেক্সট, মন্তব্য, বর্ণনা
NUMBERTYPE_CLASS_NUMBER (2)সংখ্যাসূচকপরিমাণ, মূল্য, বয়স
PHONETYPE_CLASS_PHONE (3)ফোনফোন নম্বর
DATETIMETYPE_CLASS_DATETIME (4)তারিখ/সময়তারিখ, সময়

TYPE_CLASS_DATETIME সরাসরি খুব কমই ব্যবহৃত হয় — তারিখ ইনপুটের জন্য সাধারণত টেক্সট ফিল্ডের পরিবর্তে DatePicker বা DatePickerDialog ব্যবহার করা হয়। তবে, কিছু পরিস্থিতিতে (দ্রুত ম্যানুয়াল তারিখ এন্ট্রি), এই ক্লাসটি উপযোগী হতে পারে। এর কোন বিশেষায়িত কীবোর্ড নেই এবং এটি সাধারণত একটি সংখ্যাসূচক কীবোর্ড প্রদর্শন করে।

প্রতিটি ইনপুট ক্লাস ভ্যারিয়েশনের সাথে একত্রিত করা যেতে পারে — বিট 5–7-এ নির্দিষ্ট উপপ্রকার। উদাহরণস্বরূপ, TYPE_TEXT_VARIATION_PASSWORD (বিট 5) TEXT ক্লাসে লুকানো ইনপুট যোগ করে। ভ্যারিয়েশন বিট: 0x000000E0 (TYPE_MASK_VARIATION মাস্ক)।

InputType মডিফায়ার ফ্ল্যাগ

মডিফায়ার ফ্ল্যাগ InputType (বিট 8–31) বেস ক্লাসে অতিরিক্ত ক্ষমতা যোগ করে। তারা কীবোর্ডের ধরন পরিবর্তন করে না তবে ইনপুট আচরণ পরিবর্তন করে। ফ্ল্যাগ প্রতিটি ক্লাসের জন্য নির্দিষ্ট — TEXT ফ্ল্যাগ NUMBER-এর সাথে কাজ করে না, এবং এর বিপরীত। নীচে প্রতিটি ক্লাসের জন্য প্রধান মডিফায়ার দেওয়া হল।

TEXT-এর জন্য ফ্ল্যাগ

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — সব অক্ষর বড় হাতের।
  • TYPE_TEXT_FLAG_CAP_WORDS — প্রতিটি শব্দ বড় হাতের অক্ষরে শুরু।
  • TYPE_TEXT_FLAG_CAP_SENTENCES — বাক্যের শুরুতে বড় হাতের অক্ষর (ডিফল্ট)।
  • TYPE_TEXT_FLAG_AUTO_CORRECT — স্বয়ংক্রিয় টাইপো সংশোধন।
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — অটোকমপ্লিট (AutoCompleteTextView-এর জন্য)।
  • TYPE_TEXT_FLAG_MULTI_LINE — মাল্টিলাইন ইনপুট।
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — পরামর্শ নিষ্ক্রিয় করুন।

NUMBER-এর জন্য ফ্ল্যাগ

  • TYPE_NUMBER_FLAG_SIGNED — ঋণাত্মক সংখ্যার অনুমতি দেয় (মাইনাস চিহ্ন)।
  • TYPE_NUMBER_FLAG_DECIMAL — দশমিক বিন্দুর অনুমতি দেয়।

Android Developers Documentation (2026) অনুসারে, বিভিন্ন ক্লাসের ফ্ল্যাগ ওভারল্যাপ করে না — NUMBER-এর সাথে TEXT ফ্ল্যাগ ব্যবহারের প্রচেষ্টা উপেক্ষা করা হবে। একটি সেট ফ্ল্যাগ চেক করতে, বিটওয়াইজ AND ব্যবহার করুন: (inputType and FLAG) != 0.

InputType সংমিশ্রণ: বিভিন্ন পরিস্থিতির জন্য উদাহরণ

InputType ক্লাস এবং ফ্ল্যাগের সঠিক সংমিশ্রণ ব্যবহারকারী-বান্ধব ফর্ম তৈরি করার চাবিকাঠি। আসুন সাধারণ পরিস্থিতি এবং তাদের সংশ্লিষ্ট InputType কনফিগারেশন দেখি। প্রতিটি পরিস্থিতি একটি নির্দিষ্ট ডেটা টাইপের জন্য ইনপুট অপ্টিমাইজ করে, ফর্মটি স্বজ্ঞাত করে তোলে এবং পূরণের গতি বাড়ায়।

পরিস্থিতিInputTypeকীবোর্ড
নামtextCapWordsQWERTY, প্রতিটি শব্দ বড় হাতের
ইমেলtextEmailAddressQWERTY @ এবং . সহ
পাসওয়ার্ডtextPasswordQWERTY, লুকানো ইনপুট
ফোনphoneঅঙ্ক +, #, * সহ
মূল্যnumberDecimalদশমিক বিন্দু সহ অঙ্ক
পরিমাণnumberশুধুমাত্র অঙ্ক
মন্তব্যtextCapSentences|textMultiLineQWERTY, মাল্টিলাইন
অনুসন্ধানtext|textNoSuggestionsQWERTY পরামর্শ ছাড়া
kotlin
// মূল্য ফিল্ডের জন্য সমন্বয়
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

InputType নিয়ে প্রোগ্রামেটিক কাজ

setInputType() এর মাধ্যমে প্রোগ্রামেটিকভাবে InputType সেট করা পূর্ববর্তী মান ওভাররাইট করে। যদি আপনার শুধুমাত্র মাস্কের একটি অংশ পরিবর্তন করার প্রয়োজন হয় (উদাহরণস্বরূপ, একটি ফ্ল্যাগ যোগ করা), তাহলে আপনাকে বর্তমান মান সংরক্ষণ করতে হবে, এটি পরিবর্তন করতে হবে এবং পুনরায় প্রয়োগ করতে হবে। setInputType()-এর প্রতিটি কল EditText-এর অভ্যন্তরীণ ফিল্টার পুনরায় কনফিগার করে।

setRawInputType() মেথডটি setInputType থেকে ভিন্ন কারণ এটি ফিল্টার এবং পরামর্শের পুনর্বিন্যাস ট্রিগার করে না। এটি EditText অবস্থার সম্পূর্ণ পুনরায় লোড ছাড়াই অস্থায়ীভাবে InputType পরিবর্তন করতে ব্যবহৃত হয়। setInputType() কল করার পরে, কীবোর্ড আপডেট করতে IME পুনরায় চালু করার পরামর্শ দেওয়া হয়।

মোড স্যুইচ করা

kotlin
// পাসওয়ার্ড এবং দৃশ্যমান টেক্সটের মধ্যে টগল করুন
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)
}

ক্লাস এবং ভ্যারিয়েশন বের করা

kotlin
// ইনপুট ক্লাস পান
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 বেছে নেওয়ার জন্য সেরা অনুশীলন

সঠিক InputType নির্বাচন করা শুধুমাত্র UX নয় বরং নিরাপত্তা এবং ডেটা সঠিকতার বিষয়ও। মূল সুপারিশগুলির মধ্যে রয়েছে: প্রতিটি EditText-এর জন্য সর্বদা একটি স্পষ্ট InputType নির্দিষ্ট করুন; যথাসম্ভব সবচেয়ে নির্দিষ্ট ইনপুট ক্লাস ব্যবহার করুন; বিভিন্ন ক্লাসের ফ্ল্যাগ একত্রিত করবেন না; সংবেদনশীল ডেটা ফিল্ডের জন্য PASSWORD ভ্যারিয়েশন ব্যবহার করুন; অনুসন্ধান ফিল্ডের জন্য imeOptions="actionSearch" ব্যবহার করুন।

InputType অ্যাক্সেসিবিলিটি সার্ভিসের (Accessibility) ক্রিয়াকলাপকেও প্রভাবিত করে। textPassword টাইপের ফিল্ডগুলি স্ক্রিন রিডার থেকে অতিরিক্ত সুরক্ষা পায় — তারা প্রবেশ করা অক্ষর জোরে জোরে পড়ে না। textEmailAddress ফিল্ডের জন্য, স্ক্রিন রিডার ব্যবহারকারীকে জানায় যে ফিল্ডটি ইমেলের জন্য এবং উপযুক্ত পরামর্শ প্রদান করে।

  • স্পষ্টতা — সর্বদা স্পষ্টভাবে InputType সেট করুন, ডিফল্ট মানের (textMultiLine) উপর নির্ভর করবেন না।
  • নির্দিষ্টতা — সবচেয়ে নির্দিষ্ট টাইপ ব্যবহার করুন: ইমেলের জন্য text নয়, textEmailAddress।
  • নিরাপত্তা — পাসওয়ার্ড, PIN এবং কার্ড ডেটার জন্য PASSWORD ভ্যারিয়েশন ব্যবহার করুন।
  • অটোফিল — পাসওয়ার্ড ম্যানেজার সমর্থনের জন্য InputType-কে autofillHints-এর সাথে একত্রিত করুন।
  • পরীক্ষা — বিভিন্ন কীবোর্ডে (Gboard, SwiftKey, Samsung Keyboard) আচরণ পরীক্ষা করুন।

Material Design Guidelines (2025) অনুসারে, InputType ব্যবহারকারীর প্রবেশ করা ডেটার ধরণের সাথে মিলিত হওয়া উচিত। ভুল InputType শুধুমাত্র ইনপুট ধীর করে না বরং ত্রুটির কারণও হতে পারে: উদাহরণস্বরূপ, আপনি যদি একটি ফোন নম্বর ফিল্ডের জন্য textMultiLine রেখে দেন, কীবোর্ড সংখ্যাসূচক কীপ্যাড দেখাবে না এবং ব্যবহারকারীকে প্রতিবার ম্যানুয়ালি লেআউট পরিবর্তন করতে হবে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

InputType কীভাবে Keyboard Type থেকে আলাদা?

InputType একটি EditText অ্যাট্রিবিউট যা বিটমাস্কের মাধ্যমে ইনপুট ডেটার ধরন সংজ্ঞায়িত করে। Keyboard Type হল InputType দ্বারা সক্রিয় ভিজ্যুয়াল কীবোর্ড ধরণের একটি অনানুষ্ঠানিক নাম। InputType অক্ষর ফিল্টারিং, অটোকরেক্ট এবং অটোকমপ্লিটকেও প্রভাবিত করে — শুধু কীবোর্ড লেআউট নয়।

কীভাবে InputType ডিফল্ট মানে রিসেট করবেন?

editText.inputType = InputType.TYPE_CLASS_TEXT সেট করুন অথবা সম্পূর্ণ রিসেটের জন্য ধ্রুবক InputType.TYPE_NULL (0x00000000) ব্যবহার করুন। TYPE_NULL-এর সাথে, ফোকাস করলে ফিল্ডটি কীবোর্ড দেখাবে না। স্ট্যান্ডার্ড টেক্সট ইনপুটে ফিরে যেতে, ফ্ল্যাগ ছাড়া TYPE_CLASS_TEXT সেট করুন।

আমি কি কাস্টম InputType তৈরি করতে পারি?

আপনি একটি নতুন InputType ক্লাস তৈরি করতে পারবেন না, কারণ এটি Android ফ্রেমওয়ার্কের অংশ। তবে, আপনি কাঙ্ক্ষিত আচরণ অর্জনের জন্য বিদ্যমান ক্লাস এবং ফ্ল্যাগ একত্রিত করতে পারেন। InputFilter-এর মাধ্যমে অতিরিক্ত অক্ষর ফিল্টারিং বাস্তবায়ন করুন, যা setFilters() মেথডের মাধ্যমে EditText-এ সেট করা হয়।

InputType কীভাবে IME (কীবোর্ড) কে প্রভাবিত করে?

InputType ইনপুট সিস্টেমে InputConnection-এর মাধ্যমে প্রেরণ করা হয়। IME InputType ক্লাস এবং ভ্যারিয়েশন পড়ে এবং সংশ্লিষ্ট কীবোর্ড লেআউট নির্বাচন করে। উদাহরণস্বরূপ, TYPE_CLASS_NUMBER এর সাথে TYPE_NUMBER_FLAG_DECIMAL কীবোর্ডকে দশমিক বিন্দু সহ একটি সংখ্যাসূচক কীপ্যাড দেখাতে বাধ্য করে। বেশিরভাগ আধুনিক কীবোর্ড এই সুপারিশগুলি অনুসরণ করে।

রানটাইমে InputType কীভাবে পরীক্ষা করবেন?

Kotlin-এ editText.inputType প্রপার্টি বা Java-তে editText.getInputType() ব্যবহার করুন। ক্লাস বের করতে, মাস্ক প্রয়োগ করুন: inputType and InputType.TYPE_MASK_CLASS। একটি নির্দিষ্ট ফ্ল্যাগ পরীক্ষা করতে: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — যদি ফলাফল != 0 হয়, ফ্ল্যাগ সেট করা আছে।

সারসংক্ষেপ

  • InputType — একটি বিটমাস্ক যা একটি ইনপুট ক্লাস (TEXT, NUMBER, PHONE, DATETIME) এবং মডিফায়ার নিয়ে গঠিত।
  • ইনপুট ক্লাস মৌলিক ডেটা টাইপ এবং প্রদর্শিত কীবোর্ডের ধরন সংজ্ঞায়িত করে।
  • মডিফায়ার আচরণ স্পষ্ট করে: মাল্টিলাইন, অটোকরেক্ট, বড় হাতের অক্ষর, লুকানো ইনপুট।
  • বিটওয়াইজ OR-এর মাধ্যমে একত্রিতকরণ বিভিন্ন পরিস্থিতির জন্য সঠিক কনফিগারেশন তৈরি করার অনুমতি দেয়।
  • PASSWORD ভ্যারিয়েশন অটোকরেক্ট নিষ্ক্রিয় করে, অক্ষর লুকিয়ে রাখে এবং অভিধান স্টোরেজ প্রতিরোধ করে।
  • প্রোগ্রামেটিক সেটিং setInputType()-এর মাধ্যমে কীবোর্ড আপডেট করতে IME পুনরায় চালু করা প্রয়োজন।
  • সেরা অনুশীলন — স্পষ্টভাবে InputType সেট করুন, নির্দিষ্ট টাইপ ব্যবহার করুন এবং বিভিন্ন কীবোর্ডে পরীক্ষা করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন