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

تجربة طريقة الإنشاء
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" />
نوع إدخال كلمة المرور النصية
الشكل 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().