EditText: ما هو، السمات والعمل مع حقل الإدخال في Android

المؤلف: IT Sectr نُشر: 2026-07-07 وقت القراءة: 9 دق

EditText هو مكون Android أساسي مصمم لإدخال وتحرير النص في واجهة المستخدم. يرث من TextView ويتيح إدخال الأحرف عبر لوحات المفاتيح الافتراضية أو الفيزيائية. يدعم EditText أوضاعاً متعددة: نص أحادي ومتعدد الأسطر، كلمات مرور، أرقام، عناوين بريد إلكتروني وأرقام هواتف. وفقاً لـ Android Developers (2026)، يتم استخدام EditText في أكثر من 90% من تطبيقات Android لإنشاء النماذج وحقول البحث والدردشات وشاشات إدخال البيانات.

الرئيسية

  • EditText — المكون الأساسي لإدخال النص في Android، وراثة من TextView.
  • أوضاع الإدخال — يدعم النص والأرقام وكلمات المرور والبريد الإلكتروني والهاتف والإدخال متعدد الأسطر.
  • سمات XML — التكوين عبر inputType و maxLines و hint و textColorHint وغيرها من المعلمات.
  • المستمعات — TextWatcher لتتبع التغييرات و OnEditorActionListener لمعالجة الإجراءات.
  • Material Design — TextInputLayout يوسع EditText بعلامة عائمة ورسائل خطأ.

ما هو EditText في Android

EditText هو فئة من حزمة android.widget تنفذ حقل نص تفاعلي لإدخال بيانات المستخدم. في تسلسل الوراثة في Android، يمتد EditText من TextView، لذلك يرث جميع خصائص تسمية النص، بما في ذلك إدارة الخطوط والألوان والمحاذاة. الفرق الرئيسي بين EditText و TextView هو القدرة على تحرير المحتوى — يمكن للمستخدم إدخال النص وحذفه وتعديله مباشرة في الواجهة.

كل EditText مرتبط بمثيل Editable يخزن النص المُدخل ويدعم عمليات الإدراج والحذف والاستبدال. عند الكتابة، يدير EditText تلقائياً موضع المؤشر واختيار النص وسجل التغييرات للتراجع/الإعادة. وفقاً لـ Android Developers Guide (2026)، يدعم EditText أيضاً الإكمال التلقائي عبر فئة AutoCompleteTextView، التي ترث من EditText.

تم تصميم بنية EditText على فصل النموذج (Editable) والعرض (TextView) والمتحكم (InputConnection). عند الحصول على التركيز، ينشئ EditText InputConnection الذي يمرر من خلاله نظام الإدخال الأحرف وضغطات المفاتيح وأوامر التحرير. تضمن هذه الآلية التوافق مع أي طريقة إدخال — من لوحات المفاتيح الافتراضية إلى لوحات مفاتيح Bluetooth الفيزيائية والإدخال الصوتي.

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 هي من أهم السمات — فهي تخبر المستخدم بالبيانات المتوقعة في الحقل. عند إدخال النص، يختفي التلميح تلقائياً. لا يشارك التلميح في إرسال النموذج ولا يتم حفظه كقيمة للحقل. يوصي Material Design باستخدام TextInputLayout مع علامة عائمة بدلاً من التلميح البسيط لمظهر أكثر حداثة.

  • 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)، Search (IME_ACTION_SEARCH)، Send (IME_ACTION_SEND)، Next (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يغير لون النص المُدخل
لون التلميحandroid: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، الذي يُحول إلى String عبر toString(). تحقق دائماً من القيم الخالية والفارغة قبل استخدام النص، خاصة في النماذج ذات الحقول الإلزامية.

كيفية جعل EditText متعدد الأسطر؟

عيّن السمة android:inputType="textMultiLine" أو أضف برمجياً العلم InputType.TYPE_TEXT_FLAG_MULTI_LINE. في وضع متعدد الأسطر، يسمح EditText بفواصل الأسطر عبر Enter ويتوسع تلقائياً في الارتفاع. استخدم android:maxLines أو android:minLines لتحديد الارتفاع.

كيفية تعطيل EditText للتحرير؟

عيّن السمة android:enabled="false" أو استدعِ editText.isEnabled = false في الكود. EditText المعطل لا يستجيب للمس ولا يمكنه الحصول على التركيز ويظهر باللون الرمادي (حالة معطلة). بديل هو استخدام android:focusable="false"، الذي يعطل الإدخال لكنه يحتفظ بالمظهر الطبيعي.

الخلاصة

  • EditText — المكون الأساسي لإدخال النص في Android، وراثة من TextView مع دعم التحرير.
  • inputType يحدد وضع لوحة المفاتيح والأحرف المسموح بها: نص، رقم، بريد إلكتروني، هاتف، كلمة مرور.
  • TextWatcher يتيح تتبع تغييرات النص في الوقت الفعلي للتحقق والإكمال التلقائي.
  • OnEditorActionListener يعالج إجراءات لوحة المفاتيح: Done، Search، Next، Send.
  • InputFilter يقيد أحرف الإدخال وطول النص عبر مرشحات مخصصة.
  • السمات مثل hint و maxLines و maxLength و textColorHint تضبط السلوك والمظهر.
  • Material Design عبر TextInputLayout يوفر مظهراً حديثاً بعلامات عائمة وأخطاء.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا