تحديد نوع أسلوب الإدخال

تجربة طريقة Compose
‫Jetpack Compose هي مجموعة أدوات واجهة المستخدِم المقترَحة لأجهزة Android. تعرَّف على كيفية استخدام ميزتَي اللمس والإدخال في Compose.

يتوقّع كل حقل نص نوعًا معيّنًا من إدخال النص، مثل عنوان البريد الإلكتروني أو رقم الهاتف أو النص العادي. يجب تحديد نوع الإدخال لكل حقل نص في تطبيقك حتى يعرض النظام طريقة الإدخال المناسبة، مثل لوحة المفاتيح على الشاشة.

بالإضافة إلى نوع الأزرار المتاحة مع طريقة الإدخال، يمكنك تحديد سلوكيات، مثل ما إذا كانت طريقة الإدخال تقدّم اقتراحات إملائية، وما إذا كانت تضع الحرف الأول من الجمل الجديدة كبيرًا، وما إذا كانت تستبدل زرّ الرجوع إلى السطر بزرّ إجراء، مثل تم أو التالي. تعرض هذه الصفحة كيفية تحديد هذه الخصائص.

تحديد نوع لوحة المفاتيح

يجب دائمًا الإعلان عن طريقة الإدخال لحقول النص من خلال إضافة السمة android:inputType إلى العنصر <EditText>.

إدخال رقم الهاتف
الشكل 1. نوع الإدخال phone

على سبيل المثال، إذا كنت تريد طريقة إدخال لإدخال رقم هاتف، استخدِم القيمة "phone":

<EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/phone_hint"
    android:inputType="phone" />
نوع الإدخال textPassword
الشكل 2. نوع الإدخال textPassword

إذا كان حقل النص مخصّصًا لكلمة مرور، استخدِم القيمة "textPassword" حتى يخفي حقل النص ما يدخله المستخدم:

<EditText
    android:id="@+id/password"
    android:hint="@string/password_hint"
    android:inputType="textPassword"
    ... />

هناك عدة قيم محتمَلة موثّقة مع السمة android:inputType، ويمكنك الجمع بين بعض القيم لتحديد مظهر طريقة الإدخال والسلوكيات الإضافية.

تفعيل الاقتراحات الإملائية والسلوكيات الأخرى

التصحيح التلقائي
الشكل 3. تؤدي إضافة textAutoCorrect إلى توفير التصحيح التلقائي للأخطاء الإملائية.

تتيح لك السمة android:inputType تحديد سلوكيات مختلفة لطريقة الإدخال. الأهم من ذلك، إذا كان حقل النص مخصّصًا لإدخال نص أساسي، مثل رسالة نصية، فعِّل التصحيح التلقائي للأخطاء الإملائية باستخدام القيمة "textAutoCorrect".

يمكنك الجمع بين سلوكيات مختلفة وأنماط طريقة الإدخال باستخدام السمة android:inputType. على سبيل المثال، إليك كيفية إنشاء حقل نص يضع الحرف الأول من الكلمة الأولى في الجملة كبيرًا ويصحّح أيضًا الأخطاء الإملائية تلقائيًا:

<EditText
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType=
        "textCapSentences|textAutoCorrect"
    ... />

تحديد إجراء طريقة الإدخال

توفّر معظم طرق الإدخال على الشاشة زرّ إجراء للمستخدم في أسفل الزاوية المناسبة لحقل النص الحالي. تلقائيًا، يستخدم النظام هذا الزرّ لإجراء التالي أو تم ما لم يكن حقل النص يتيح إدخال نص متعدد الأسطر، مثل android:inputType="textMultiLine"، وفي هذه الحالة يكون زرّ الإجراء هو الرجوع إلى السطر. ومع ذلك، يمكنك تحديد إجراءات أخرى قد تكون أكثر ملاءمةً لحقل النص، مثل إرسال أو انتقال.

لتحديد زرّ إجراء لوحة المفاتيح، استخدِم السمة android:imeOptions مع قيمة إجراء، مثل "actionSend" أو "actionSearch". على سبيل المثال:

زر الإرسال
الشكل 4. يظهر الزرّ إرسال عند الإعلان عن android:imeOptions="actionSend".
<EditText
    android:id="@+id/search"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:inputType="text"
    android:imeOptions="actionSend" />

يمكنك بعد ذلك الاستماع إلى عمليات الضغط على زرّ الإجراء من خلال تحديد TextView.OnEditorActionListener لعنصر EditText. في المستمع، استجِب لمعرّف إجراء IME المناسب المحدّد في الفئة EditorInfo، مثل IME_ACTION_SEND، كما هو موضّح في المثال التالي:

Kotlin

findViewById<EditText>(R.id.search).setOnEditorActionListener { v, actionId, event ->
    return@setOnEditorActionListener when (actionId) {
        EditorInfo.IME_ACTION_SEND -> {
            sendMessage()
            true
        }
        else -> false
    }
}

Java

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

توفير اقتراحات الإكمال التلقائي

إذا كنت تريد تقديم اقتراحات للمستخدمين أثناء الكتابة، يمكنك استخدام فئة فرعية من EditText تُسمى AutoCompleteTextView. لتنفيذ ميزة الإكمال التلقائي، يجب تحديد Adapter يقدّم الاقتراحات النصية. تتوفّر عدة محوّلات، حسب مصدر البيانات، مثل قاعدة بيانات أو مصفوفة.

اقتراحات نصية
الشكل 5. مثال على AutoCompleteTextView مع اقتراحات نصية

يصف الإجراء التالي كيفية إعداد AutoCompleteTextView يقدّم اقتراحات من مصفوفة باستخدام ArrayAdapter:

  1. أضِف AutoCompleteTextView إلى تنسيقك. في ما يلي تنسيق يحتوي على حقل النص فقط:
    <?xml version="1.0" encoding="utf-8"?>
    <AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/autocomplete_country"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
  2. حدِّد المصفوفة التي تحتوي على جميع الاقتراحات النصية. على سبيل المثال، إليك مصفوفة بأسماء البلدان:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="countries_array">
            <item>Afghanistan</item>
            <item>Albania</item>
            <item>Algeria</item>
            <item>American Samoa</item>
            <item>Andorra</item>
            <item>Angola</item>
            <item>Anguilla</item>
            <item>Antarctica</item>
            ...
        </string-array>
    </resources>
  3. في Activity أو Fragment، استخدِم الرمز التالي لتحديد المحوّل الذي يقدّم الاقتراحات:

    Kotlin

    // Get a reference to the AutoCompleteTextView in the layout.
    val textView = findViewById(R.id.autocomplete_country) as AutoCompleteTextView
    // Get the string array.
    val countries: Array<out String> = resources.getStringArray(R.array.countries_array)
    // Create the adapter and set it to the AutoCompleteTextView.
    ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries).also { adapter ->
        textView.setAdapter(adapter)
    }

    Java

    // Get a reference to the AutoCompleteTextView in the layout.
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
    // Get the string array.
    String[] countries = getResources().getStringArray(R.array.countries_array);
    // Create the adapter and set it to the AutoCompleteTextView.
    ArrayAdapter<String> adapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries);
    textView.setAdapter(adapter);

    في المثال السابق، يتم تهيئة ArrayAdapter جديد لربط كل عنصر في مصفوفة السلاسل النصية countries_array بـ TextView موجود في التنسيق simple_list_item_1. هذا تنسيق يوفّره Android ويقدّم مظهرًا عاديًا للنص في القائمة.

  4. عيِّن المحوّل لـ AutoCompleteTextView من خلال استدعاء setAdapter().