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

تجربة ميزة "الكتابة"
‫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"، وفي هذه الحالة يكون زر الإجراء هو زر carriage return. ومع ذلك، يمكنك تحديد إجراءات أخرى قد تكون أكثر ملاءمةً لحقل النص، مثل إرسال أو الانتقال.

لتحديد زرّ إجراء لوحة المفاتيح، استخدِم السمة 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().