EditText হলো একটি মৌলিক Android উপাদান যা ইউজার ইন্টারফেসে টেক্সট ইনপুট এবং সম্পাদনার জন্য ডিজাইন করা হয়েছে। এটি TextView থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং ভার্চুয়াল বা ফিজিক্যাল কীবোর্ড থেকে ক্যারেক্টার ইনপুটের অনুমতি দেয়। EditText অনেক মোড সমর্থন করে: একক এবং বহু-লাইন টেক্সট, পাসওয়ার্ড, সংখ্যা, ইমেল ঠিকানা এবং ফোন নম্বর। Android Developers (2026) অনুযায়ী, Android অ্যাপের 90% এরও বেশি ক্ষেত্রে ফর্ম, সার্চ ফিল্ড, চ্যাট এবং ডেটা এন্ট্রি স্ক্রিন তৈরির জন্য EditText ব্যবহৃত হয়।
মূল বিষয়
EditText হলো android.widget প্যাকেজের একটি ক্লাস যা ইউজার ডেটা ইনপুটের জন্য একটি ইন্টারেক্টিভ টেক্সট ফিল্ড বাস্তবায়ন করে। Android উত্তরাধিকার স্তরক্রমে, EditText TextView-কে প্রসারিত করে, তাই এটি ফন্ট, রং এবং সারিবদ্ধকরণ ব্যবস্থাপনা সহ টেক্সট লেবেলের সমস্ত বৈশিষ্ট্য উত্তরাধিকার সূত্রে পায়। EditText এবং TextView-এর মধ্যে প্রধান পার্থক্য হলো বিষয়বস্তু সম্পাদনার ক্ষমতা — ব্যবহারকারী সরাসরি ইন্টারফেসে টেক্সট ইনপুট, মুছে ফেলা এবং পরিবর্তন করতে পারেন।
প্রতিটি EditText একটি Editable ইন্সট্যান্সের সাথে যুক্ত থাকে যা ইনপুটকৃত টেক্সট সংরক্ষণ করে এবং সন্নিবেশ, মুছে ফেলা এবং প্রতিস্থাপন অপারেশন সমর্থন করে। টাইপ করার সময়, EditText স্বয়ংক্রিয়ভাবে কার্সার অবস্থান, টেক্সট নির্বাচন এবং পূর্বাবস্থা/পুনরায় করার জন্য পরিবর্তন ইতিহাস পরিচালনা করে। Android Developers Guide (2026) অনুযায়ী, EditText AutoCompleteTextView ক্লাসের মাধ্যমে অটোকমপ্লিটও সমর্থন করে, যা EditText থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
EditText-এর আর্কিটেকচার মডেল (Editable), ভিউ (TextView) এবং কন্ট্রোলার (InputConnection)-এর পৃথকীকরণের উপর নির্মিত। ফোকাস পাওয়ার পর, EditText একটি InputConnection তৈরি করে যার মাধ্যমে ইনপুট সিস্টেম ক্যারেক্টার, কী প্রেস এবং সম্পাদনা কমান্ড প্রেরণ করে। এই প্রক্রিয়া যেকোনো ইনপুট পদ্ধতি — ভার্চুয়াল কীবোর্ড থেকে ফিজিক্যাল ব্লুটুথ কীবোর্ড এবং ভয়েস ইনপুট পর্যন্ত — সাথে সামঞ্জস্য নিশ্চিত করে।
val editText = EditText(context).apply {
hint = "টেক্সট লিখুন"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText আচরণ এবং চেহারা সূক্ষ্মভাবে টিউন করার জন্য ডজন ডজন অ্যাট্রিবিউট প্রদান করে। এগুলো XML লেআউট এবং প্রোগ্রামেটিকভাবে Kotlin বা Java উভয় ক্ষেত্রেই সেট করা যেতে পারে। অ্যাট্রিবিউটগুলি বিভাগে বিভক্ত: টেক্সট নিয়ন্ত্রণ, সীমাবদ্ধতা, ভিজ্যুয়াল স্টাইলিং এবং কীবোর্ড ইন্টারঅ্যাকশন।
| অ্যাট্রিবিউট | বিবরণ | উদাহরণ মান |
|---|---|---|
| android:hint | খালি ফিল্ডে দেখানো ইঙ্গিত টেক্সট | "ইমেল লিখুন" |
| android:inputType | ইনপুট মোড (টেক্সট, সংখ্যা, পাসওয়ার্ড, ইত্যাদি) | textEmailAddress |
| android:maxLines | সর্বাধিক লাইনের সংখ্যা | 3 |
| android:maxLength | ক্যারেক্টারে সর্বাধিক টেক্সট দৈর্ঘ্য | 100 |
| android:textColorHint | ইঙ্গিত টেক্সটের রং | #999999 |
android:hint অ্যাট্রিবিউটটি সবচেয়ে গুরুত্বপূর্ণ — এটি ব্যবহারকারীকে জানায় ফিল্ডে কী ডেটা প্রত্যাশিত। যখন টেক্সট ইনপুট করা হয়, ইঙ্গিতটি স্বয়ংক্রিয়ভাবে লুকিয়ে যায়। ইঙ্গিত ফর্ম জমা দেওয়ার অংশ নয় এবং ফিল্ড মান হিসেবে সংরক্ষিত হয় না। Material Design আরও আধুনিক চেহারার জন্য সাধারণ ইঙ্গিতের পরিবর্তে ফ্লোটিং লেবেল সহ TextInputLayout ব্যবহার করার পরামর্শ দেয়।
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
inputType অ্যাট্রিবিউট নির্ধারণ করে ব্যবহারকারীকে কী ধরনের কীবোর্ড দেখানো হবে এবং ইনপুটের জন্য কোন ক্যারেক্টার অনুমোদিত। এটি একটি বিটমাস্ক যেখানে ইনপুট ক্লাস (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) মডিফায়ারের সাথে মিলিত হয়।
প্রতিটি ইনপুট মোড শুধু কীবোর্ড লেআউট পরিবর্তন করে না বরং টেক্সট প্রক্রিয়াকরণকেও প্রভাবিত করে: সংখ্যা মোডে শুধু অঙ্ক এবং দশমিক বিভাজক অনুমোদিত, ইমেল মোডে @ প্রতীক এবং ডোমেন এক্সটেনশন উপলব্ধ এবং ফোন মোডে অঙ্ক এবং +, #, * প্রতীক প্রদর্শিত হয়। সঠিক inputType নির্বাচন ব্যবহারকারীর অভিজ্ঞতাকে গুরুতরভাবে প্রভাবিত করে — অনুপযুক্ত কীবোর্ড ব্যবহারকারীদের মোড পরিবর্তন করতে বাধ্য করে, যা ফর্ম পূরণের সময় 30-50% বাড়িয়ে দেয়।
Material Design Guidelines (2025) অনুযায়ী, প্রতিটি ফিল্ডের জন্য সবচেয়ে নির্দিষ্ট inputType ব্যবহার করার পরামর্শ দেওয়া হয়: পাসওয়ার্ডের জন্য textPassword, দামের জন্য numberDecimal, ফোন নম্বরের জন্য phone, মাল্টি-লাইন ইনপুটের জন্য textMultiLine। এটি ফর্ম পূরণের গতি বাড়ায় এবং ইনপুট ত্রুটি কমায়।
// প্রোগ্রামেটিক inputType সেটআপ
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher রিয়েল টাইমে EditText-এ টেক্সট পরিবর্তন ট্র্যাক করার জন্য একটি ইন্টারফেস। এতে তিনটি মেথড রয়েছে: beforeTextChanged পরিবর্তনের আগে কল করা হয়, onTextChanged পরিবর্তনের সময় কল করা হয়, afterTextChanged টেক্সট পরিবর্তন সম্পূর্ণ হওয়ার পর কল করা হয়। TextWatcher ইনপুট যাচাইকরণ, ক্যারেক্টার গণনা, অনুসন্ধান এবং অটোকমপ্লিটের জন্য ব্যবহৃত হয়।
OnEditorActionListener কীবোর্ডে ব্যবহারকারীর ক্রিয়াগুলি হ্যান্ডল করে: Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) এবং অন্যান্য চাপা। এই লিসেনারটি ফর্ম নেভিগেশন সংগঠিত করার জন্য বিশেষভাবে উপযোগী — Next চাপলে ফোকাস স্বয়ংক্রিয়ভাবে পরবর্তী ফিল্ডে চলে যায় এবং Done চাপলে কীবোর্ড লুকিয়ে যায় এবং জমা দেওয়া সম্পাদিত হয়।
Android Developers Blog (2025) অনুযায়ী, android:imeOptions অ্যাট্রিবিউটের সাথে OnEditorActionListener-এর সঠিক ব্যবহার অতিরিক্ত জমা বোতাম ছাড়াই স্বজ্ঞাত ফর্ম তৈরি করতে দেয় — ব্যবহারকারী ফিল্ড পূরণ করে এবং কীবোর্ডে Done চাপে, যা সংরক্ষণ বা অনুসন্ধান ট্রিগার করে।
// ইমেল যাচাইকরণের জন্য TextWatcher
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// ফর্ম জমা দেওয়ার জন্য OnEditorActionListener
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
ইমেল এবং পাসওয়ার্ড ইনপুটের জন্য EditText ব্যবহার করে একটি লগইন স্ক্রিন তৈরির সম্পূর্ণ উদাহরণ দেখি। এই উদাহরণটি inputType কনফিগারেশন, TextWatcher-এর মাধ্যমে যাচাইকরণ এবং লগইন বাটন চাপা হ্যান্ডল করা প্রদর্শন করে।
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText XML অ্যাট্রিবিউট, থিম এবং স্টাইলের মাধ্যমে কাস্টমাইজেশন সমর্থন করে। টেক্সটের রং, ইঙ্গিতের রং, আন্ডারলাইনের রং (backgroundTint), ফন্ট স্টাইল, টেক্সটের আকার এবং আরও অনেক কিছু পরিবর্তন করা যায়। Material Components boxStrokeColor, boxBackgroundColor এবং endIconMode সহ কাস্টম অ্যাট্রিবিউট সহ MaterialComponents.EditText থিম প্রদান করে।
EditText-এর আন্ডারলাইনের রং পরিবর্তন করতে, android:backgroundTint অ্যাট্রিবিউট ব্যবহার করুন, যা ডিফল্ট এবং ফোকাসড অবস্থার জন্য রং সেট করে। Material Design-এ, আন্ডারলাইনের রং থিমের colorPrimary-এর মাধ্যমে পরিচালিত হয়। সম্পূর্ণ কাস্টমাইজেশনের জন্য, আপনি res/drawable ফোল্ডারে ব্যাকগ্রাউন্ডের জন্য একটি কাস্টম drawable তৈরি করতে পারেন।
| স্টাইল | অ্যাট্রিবিউট | ফলাফল |
|---|---|---|
| টেক্সটের রং | android:textColor | ইনপুটকৃত টেক্সটের রং পরিবর্তন করে |
| ইঙ্গিতের রং | android:textColorHint | ইঙ্গিত টেক্সটের রং পরিবর্তন করে |
| আন্ডারলাইন | android:backgroundTint | ফিল্ডের নিচে রেখার রং পরিবর্তন করে |
| ফন্টের আকার | android:textSize | sp-এ টেক্সটের আকার সেট করে |
| ফন্ট | android:fontFamily | কাস্টম ফন্ট প্রয়োগ করে |
আপনার অ্যাপে সমস্ত EditText ফিল্ডের জন্য একটি সামঞ্জস্যপূর্ণ স্টাইল তৈরি করতে, থিমে একটি গ্লোবাল স্টাইল সংজ্ঞায়িত করার পরামর্শ দেওয়া হয়। Material Design Widget.MaterialComponents.TextInputLayout.OutlinedBox স্টাইল প্রদান করে, যা TextInputLayout ব্যবহার করা সমস্ত ইনপুট ফিল্ডে স্বয়ংক্রিয়ভাবে প্রয়োগ হয়। এটি প্রতিটি লেআউটে অ্যাট্রিবিউটের পুনরাবৃত্তি ছাড়াই একটি সামঞ্জস্যপূর্ণ চেহারা নিশ্চিত করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
EditText TextView থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং টেক্সট সম্পাদনা ক্ষমতা যোগ করে। TextView শুধু টেক্সট প্রদর্শন করে, যেখানে EditText ব্যবহারকারীকে বিষয়বস্তু ইনপুট, মুছে ফেলা এবং পরিবর্তন করার অনুমতি দেয়। EditText inputType, TextWatcher, কার্সার ব্যবস্থাপনা এবং ডেটা ইনপুট সম্পর্কিত অন্যান্য বৈশিষ্ট্যও সমর্থন করে।
InputFilter ব্যবহার করুন — ইনপুট ক্যারেক্টার ফিল্টার করার জন্য একটি ইন্টারফেস। EditText setFilters() মেথডের মাধ্যমে ফিল্টারের একটি অ্যারে সেট করা সমর্থন করে। উদাহরণস্বরূপ, InputFilter.LengthFilter টেক্সটের দৈর্ঘ্য সীমিত করে, যখন একটি কাস্টম InputFilter নির্দিষ্ট ক্যারেক্টার, রেগুলার এক্সপ্রেশন বা ইউনিকোড রেঞ্জ নিষিদ্ধ করতে পারে।
Kotlin-এ editText.text.toString() বা Java-এ editText.getText().toString() কল করুন। text প্রপার্টি Editable রিটার্ন করে, যা toString()-এর মাধ্যমে String-এ রূপান্তরিত হয়। টেক্সট ব্যবহারের আগে সর্বদা null এবং খালি মান পরীক্ষা করুন, বিশেষত বাধ্যতামূলক ফিল্ডযুক্ত ফর্মে।
android:inputType="textMultiLine" অ্যাট্রিবিউট সেট করুন বা প্রোগ্রামেটিকভাবে InputType.TYPE_TEXT_FLAG_MULTI_LINE ফ্ল্যাগ যোগ করুন। মাল্টি-লাইন মোডে, EditText Enter-এর মাধ্যমে লাইন ব্রেকের অনুমতি দেয় এবং উচ্চতায় স্বয়ংক্রিয়ভাবে প্রসারিত হয়। উচ্চতা সীমিত করতে android:maxLines বা android:minLines ব্যবহার করুন।
android:enabled="false" অ্যাট্রিবিউট সেট করুন বা কোডে editText.isEnabled = false কল করুন। নিষ্ক্রিয় EditText স্পর্শে সাড়া দেয় না, ফোকাস পেতে পারে না এবং ধূসর রঙে প্রদর্শিত হয় (নিষ্ক্রিয় অবস্থা)। একটি বিকল্প হলো android:focusable="false" ব্যবহার করা, যা ইনপুট নিষ্ক্রিয় করে কিন্তু স্বাভাবিক চেহারা বজায় রাখে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন