EditText: چیست، ویژگی‌ها و کار با فیلد ورودی در اندروید

نویسنده: IT Sectr منتشر شده: 2026-07-07 زمان مطالعه: 9 دقیقه

EditText — یک کامپوننت پایه اندروید است که برای ورود و ویرایش متن در رابط کاربری طراحی شده است. این کامپوننت از TextView ارث‌بری می‌کند و امکان وارد کردن کاراکترها از صفحه‌کلید مجازی یا فیزیکی را فراهم می‌کند. EditText از حالت‌های متعددی پشتیبانی می‌کند: متن تک‌خطی و چندخطی، رمز عبور، اعداد، آدرس ایمیل و شماره تلفن. طبق Android Developers (2026)، EditText در بیش از 90% اپلیکیشن‌های اندروید برای ایجاد فرم‌ها، فیلدهای جستجو، چت‌ها و صفحه‌های ورود داده استفاده می‌شود.

نکات اصلی

  • EditText — کامپوننت پایه ورود متن در اندروید، وارث TextView.
  • حالت‌های ورود — از متن، اعداد، رمز عبور، ایمیل، تلفن و ورود چندخطی پشتیبانی می‌کند.
  • ویژگی‌های XML — پیکربندی از طریق inputType، maxLines، hint، textColorHint و سایر پارامترها.
  • شنوندگان — TextWatcher برای ردیابی تغییرات و OnEditorActionListener برای پردازش اقدامات.
  • Material Design — TextInputLayout EditText را با برچسب شناور و پیام‌های خطا گسترش می‌دهد.

EditText در اندروید چیست

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 ایجاد می‌کند که سیستم ورود از طریق آن کاراکترها، فشار کلیدها و دستورات ویرایش را منتقل می‌کند. این مکانیزم سازگاری با هر روش ورودی — از صفحه‌کلیدهای مجازی گرفته تا صفحه‌کلیدهای فیزیکی بلوتوث و ورود صوتی — را تضمین می‌کند.

kotlin
val editText = EditText(context).apply {
    hint = "متن را وارد کنید"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

ویژگی‌های اصلی EditText

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 ساده برای ظاهری مدرن‌تر توصیه می‌کند.

  • android:selectAllOnFocus — پس از دریافت فوکوس، تمام متن را انتخاب می‌کند (مناسب برای فیلدهای جستجو).
  • android:maxLength — تعداد کاراکترهای وارد شده را محدود کرده، اضافه را قطع می‌کند.
  • android:lines — ارتفاع ثابت فیلد را بر حسب خطوط تعیین می‌کند (بر خلاف minLines).
  • android:gravity — ترازبندی متن داخل فیلد: left، center، top و غیره.
xml
                <!-- 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

ویژگی inputType تعیین می‌کند که چه نوع صفحه‌کلیدی به کاربر نشان داده شود و چه کاراکترهایی برای ورود مجاز هستند. این یک ماسک بیتی است که در آن کلاس ورود (TYPE_CLASS_TEXT، TYPE_CLASS_NUMBER، TYPE_CLASS_PHONE) با اصلاح‌کننده‌ها ترکیب می‌شود.

هر حالت ورود نه تنها چیدمان صفحه‌کلید را تغییر می‌دهد، بلکه بر پردازش متن نیز تأثیر می‌گذارد: در حالت عددی فقط اعداد و جداکننده اعشار مجاز هستند، در حالت ایمیل نماد @ و پسوندهای دامنه در دسترس هستند، و در حالت تلفن اعداد و نمادهای +، #، * نمایش داده می‌شوند. انتخاب inputType مناسب تأثیر حیاتی بر تجربه کاربری دارد — صفحه‌کلید نامناسب کاربر را مجبور به تغییر حالت می‌کند که زمان پر کردن فرم را 30 تا 50% افزایش می‌دهد.

طبق Material Design Guidelines (2025)، توصیه می‌شود برای هر فیلد از دقیق‌ترین inputType استفاده شود: textPassword برای رمز عبور، numberDecimal برای قیمت‌ها، phone برای شماره تلفن، textMultiLine برای ورود چندخطی. این کار پر کردن فرم‌ها را سرعت می‌بخشد و تعداد خطاهای ورود را کاهش می‌دهد.

kotlin
// تنظیم برنامه‌نویسی inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

شنوندگان EditText: TextWatcher و OnEditorActionListener

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 را روی صفحه‌کلید فشار می‌دهد که ذخیره یا جستجو را راه‌اندازی می‌کند.

kotlin
// 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

بیایید یک نمونه کامل از ایجاد صفحه ورود با استفاده از EditText برای وارد کردن ایمیل و رمز عبور را بررسی کنیم. در این نمونه پیکربندی inputType، اعتبارسنجی از طریق TextWatcher و پردازش فشار دکمه ورود نشان داده شده است.

چیدمان XML صفحه ورود

xml
@+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" />

پیکربندی برنامه‌نویسی EditText

kotlin
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

EditText از شخصی‌سازی از طریق ویژگی‌های XML، تم‌ها و استایل‌ها پشتیبانی می‌کند. می‌توان رنگ متن، رنگ راهنما، رنگ خط زیرین (backgroundTint)، سبک فونت، اندازه متن و موارد دیگر را تغییر داد. Material Components تم MaterialComponents. EditText با ویژگی‌های سفارشی از جمله boxStrokeColor، boxBackgroundColor و endIconMode ارائه می‌دهد.

برای تغییر رنگ خط زیرین EditText از ویژگی android:backgroundTint استفاده می‌شود که رنگ را برای حالت پیش‌فرض و حالت فوکوس تعیین می‌کند. در Material Design رنگ خط زیرین از طریق colorPrimary تم مدیریت می‌شود. برای شخصی‌سازی کامل می‌توان یک drawable سفارشی برای پس‌زمینه در پوشه res/drawable ایجاد کرد.

استایلویژگینتیجه
رنگ متنandroid:textColorرنگ متن وارد شده را تغییر می‌دهد
رنگ hintandroid:textColorHintرنگ متن راهنما را تغییر می‌دهد
خط زیرینandroid:backgroundTintرنگ خط زیر فیلد را تغییر می‌دهد
اندازه فونتandroid:textSizeاندازه متن را بر حسب sp تعیین می‌کند
فونتandroid:fontFamilyفونت سفارشی را متصل می‌کند

برای ایجاد استایل یکپارچه برای همه EditText در اپلیکیشن، توصیه می‌شود یک استایل جهانی در تم تعریف کنید. Material Design استایل Widget.MaterialComponents.TextInputLayout.OutlinedBox را ارائه می‌دهد که به طور خودکار برای همه فیلدهای ورودی استفاده‌کننده از TextInputLayout اعمال می‌شود. این ظاهر سازگار را بدون تکرار ویژگی‌ها در هر چیدمان تضمین می‌کند.

سوالات متداول

تفاوت بین EditText و TextView چیست؟

EditText از TextView ارث‌بری می‌کند و امکان ویرایش متن را اضافه می‌کند. TextView فقط متن را نمایش می‌دهد، در حالی که EditText به کاربر اجازه می‌دهد محتوا را وارد، حذف و تغییر دهد. EditText همچنین از inputType، TextWatcher، مدیریت مکان‌نما و سایر عملکردهای مرتبط با ورود داده پشتیبانی می‌کند.

چگونه می‌توان ورود کاراکترهای خاص را در EditText ممنوع کرد؟

از InputFilter — رابطی برای فیلتر کردن کاراکترهای وارد شده استفاده کنید. EditText از تنظیم آرایه‌ای از فیلترها از طریق متد setFilters() پشتیبانی می‌کند. به عنوان مثال، InputFilter.LengthFilter طول متن را محدود می‌کند و InputFilter سفارشی می‌تواند کاراکترهای خاص، عبارات منظم یا محدوده‌های Unicode را ممنوع کند.

چگونه متن را از EditText در کد دریافت کنیم؟

متد editText.text.toString() را در Kotlin یا editText.getText().toString() را در Java فراخوانی کنید. ویژگی text یک Editable برمی‌گرداند که از طریق toString() به String تبدیل می‌شود. مهم است که متن را قبل از استفاده از نظر null و خالی بودن بررسی کنید، به ویژه در فرم‌های با فیلدهای اجباری.

چگونه EditText را چندخطی کنیم؟

ویژگی android:inputType="textMultiLine" را تنظیم کنید یا به صورت برنامه‌نویسی پرچم InputType.TYPE_TEXT_FLAG_MULTI_LINE را اضافه کنید. در حالت چندخطی EditText امکان شکستن خط با Enter را می‌دهد و به طور خودکار ارتفاع افزایش می‌یابد. برای محدود کردن ارتفاع از android:maxLines یا android:minLines استفاده کنید.

چگونه EditText را برای ویرایش غیرفعال کنیم؟

ویژگی android:enabled="false" را تنظیم کنید یا در کد editText.isEnabled = false را فراخوانی کنید. EditText غیرفعال شده به لمس‌ها واکنش نشان نمی‌دهد، فوکوس نمی‌گیرد و به رنگ خاکستری (حالت disabled) نمایش داده می‌شود. جایگزین استفاده از android:focusable="false" است که ورود را غیرفعال می‌کند اما ظاهر عادی را حفظ می‌کند.

خلاصه

  • EditText — کامپوننت پایه ورود متن در اندروید، وارث TextView با پشتیبانی از ویرایش.
  • inputType حالت صفحه‌کلید و کاراکترهای مجاز را تعیین می‌کند: متن، عدد، ایمیل، تلفن، رمز عبور.
  • TextWatcher امکان ردیابی تغییرات متن در زمان واقعی برای اعتبارسنجی و تکمیل خودکار.
  • OnEditorActionListener اقدامات صفحه‌کلید را پردازش می‌کند: Done، Search، Next، Send.
  • InputFilter کاراکترهای وارد شده و طول متن را از طریق فیلترهای سفارشی محدود می‌کند.
  • ویژگی‌ها hint، maxLines، maxLength، textColorHint رفتار و ظاهر فیلد را پیکربندی می‌کنند.
  • Material Design استایل‌دهی از طریق TextInputLayout ظاهر مدرن با برچسب شناور و خطاها را فراهم می‌کند.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید