EditText — یک کامپوننت پایه اندروید است که برای ورود و ویرایش متن در رابط کاربری طراحی شده است. این کامپوننت از TextView ارثبری میکند و امکان وارد کردن کاراکترها از صفحهکلید مجازی یا فیزیکی را فراهم میکند. EditText از حالتهای متعددی پشتیبانی میکند: متن تکخطی و چندخطی، رمز عبور، اعداد، آدرس ایمیل و شماره تلفن. طبق Android Developers (2026)، EditText در بیش از 90% اپلیکیشنهای اندروید برای ایجاد فرمها، فیلدهای جستجو، چتها و صفحههای ورود داده استفاده میشود.
نکات اصلی
EditText — کلاسی از بسته android.widget است که یک فیلد متنی تعاملی برای ورود داده توسط کاربر پیادهسازی میکند. در سلسلهمراتب ارثبری اندروید EditText extends TextView، بنابراین تمام ویژگیهای برچسب متنی از جمله مدیریت فونتها، رنگها و ترازبندی را به ارث میبرد. تفاوت اصلی EditText با TextView در امکان ویرایش محتوا است — کاربر میتواند مستقیماً در رابط کاربری متن را وارد، حذف و تغییر دهد.
هر EditText به یک نمونه Editable متصل است که متن وارد شده را ذخیره میکند و از عملیات درج، حذف و جایگزینی کاراکترها پشتیبانی میکند. هنگام وارد کردن متن، EditText به طور خودکار موقعیت مکاننما، انتخاب متن و تاریخچه تغییرات برای undo/redo را مدیریت میکند. طبق 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 یکی از مهمترینها است — به کاربر اطلاع میدهد که چه دادهای در فیلد مورد انتظار است. هنگام وارد کردن متن، hint به طور خودکار پنهان میشود. Hint در ارسال فرم شرکت نمیکند و به عنوان مقدار فیلد ذخیره نمیشود. Material Design استفاده از TextInputLayout با برچسب شناور را به جای hint ساده برای ظاهری مدرنتر توصیه میکند.
<!-- 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)، جستجو (IME_ACTION_SEARCH)، ارسال (IME_ACTION_SEND)، انتقال به فیلد بعدی (IME_ACTION_NEXT) و موارد دیگر. این شنونده به ویژه برای سازماندهی ناوبری فرم مفید است — با فشار Next فوکوس به طور خودکار به فیلد بعدی منتقل میشود و با فشار Done صفحهکلید پنهان شده و ارسال انجام میشود.
طبق Android Developers Blog (2025)، استفاده صحیح از OnEditorActionListener با ویژگی android:imeOptions امکان ایجاد فرمهای بصری بدون دکمههای ارسال اضافی را فراهم میکند — کاربر فیلدها را پر کرده و 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 تم MaterialComponents. EditText با ویژگیهای سفارشی از جمله boxStrokeColor، boxBackgroundColor و endIconMode ارائه میدهد.
برای تغییر رنگ خط زیرین EditText از ویژگی android:backgroundTint استفاده میشود که رنگ را برای حالت پیشفرض و حالت فوکوس تعیین میکند. در Material Design رنگ خط زیرین از طریق colorPrimary تم مدیریت میشود. برای شخصیسازی کامل میتوان یک drawable سفارشی برای پسزمینه در پوشه res/drawable ایجاد کرد.
| استایل | ویژگی | نتیجه |
|---|---|---|
| رنگ متن | android:textColor | رنگ متن وارد شده را تغییر میدهد |
| رنگ hint | 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 سفارشی میتواند کاراکترهای خاص، عبارات منظم یا محدودههای Unicode را ممنوع کند.
متد editText.text.toString() را در Kotlin یا editText.getText().toString() را در Java فراخوانی کنید. ویژگی 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 غیرفعال شده به لمسها واکنش نشان نمیدهد، فوکوس نمیگیرد و به رنگ خاکستری (حالت disabled) نمایش داده میشود. جایگزین استفاده از android:focusable="false" است که ورود را غیرفعال میکند اما ظاهر عادی را حفظ میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید