إطار عمل المدقق الإملائي

يوفّر نظام Android الأساسي إطار عمل المدقق الإملائي الذي يتيح لك تنفيذ التدقيق الإملائي والوصول إليه في تطبيقك. وإطار العمل هو أحد واجهات برمجة تطبيقات Text Service API.

لاستخدام إطار العمل في تطبيقك، يمكنك إنشاء إحدى خدمات Android التي تنشئ عنصر المدقق الإملائي session. استنادًا إلى النص الذي تقدمه، يعرض كائن الجلسة اقتراحات إملائية تم إنشاؤها بواسطة المدقق الإملائي.

مراحل نشاط المدقق الإملائي

يعرض المخطّط التالي دورة حياة خدمة المدقق الإملائي:

صورة تعرض دورة حياة خدمة المدقق الإملائي
الشكل 1. دورة حياة خدمة المدقق الإملائي.

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

تنفيذ خدمة المدقق الإملائي

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

فصول المدقق الإملائي

حدِّد الخدمة وكائن الجلسة باستخدام الفئات التالية:

  • فئة فرعية من SpellCheckerService
    ينفّذ SpellCheckerService كلاً من فئة Service وواجهة إطار عمل المدقق الإملائي. ضمن الفئة الفرعية، نفِّذ الطريقة التالية:
    createSession()
    طريقة على الإعدادات الأصلية تُرجع عنصر SpellCheckerService.Session إلى عميل يريد إجراء تدقيق إملائي.
  • تنفيذ SpellCheckerService.Session
    يشير هذا المصطلح إلى عنصر توفّره خدمة المدقق الإملائي للعملاء للسماح لهم بتمرير نص إلى المدقق الإملائي وتلقّي الاقتراحات. في هذه الفئة، نفِّذ الطرق التالية:
    onCreate()
    تم الاتصال من قِبل النظام استجابةً لـ createSession(). يمكنك بهذه الطريقة إعداد العنصر SpellCheckerService.Session استنادًا إلى اللغة الحالية وتفاصيل أخرى.
    onGetSentenceSuggestionsMultiple()
    ينفِّذ التدقيق الإملائي الفعلي. تعرِض هذه الطريقة مصفوفة من SentenceSuggestionsInfo تتضمّن اقتراحات للجمل التي تم تمريرها إليه.

    ويمكنك اختياريًا تنفيذ الترميز onCancel() الذي يعالج طلبات إلغاء التدقيق الإملائي، أو onGetSuggestions() الذي يعالج طلب اقتراح كلمات، أو onGetSuggestionsMultiple() الذي يعالج مجموعات من طلبات اقتراح الكلمات.

بيان المدقق الإملائي وبياناته الوصفية

بالإضافة إلى التعليمات البرمجية، قدم ملف البيان المناسب وملف البيانات الوصفية للمدقق الإملائي.

يحدِّد ملف البيان التطبيق والخدمة ونشاط التحكّم في الإعدادات، كما هو موضّح في المثال التالي:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.samplespellcheckerservice" >
    <application
        android:label="@string/app_name" >
        <service
            android:label="@string/app_name"
            android:name=".SampleSpellCheckerService"
            android:permission="android.permission.BIND_TEXT_SERVICE" >
            <intent-filter >
                <action android:name="android.service.textservice.SpellCheckerService" />
            </intent-filter>

            <meta-data
                android:name="android.view.textservice.scs"
                android:resource="@xml/spellchecker" />
        </service>

        <activity
            android:label="@string/sample_settings"
            android:name="SpellCheckerSettingsActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>

أمّا المكونات التي تريد استخدام الخدمة، فيجب أن تطلب الإذن BIND_TEXT_SERVICE لضمان ربط النظام فقط بالخدمة. ويحدّد تعريف الخدمة أيضًا ملف البيانات الوصفية spellchecker.xml، والموضّح في القسم التالي.

يحتوي ملف البيانات الوصفية spellchecker.xml على ملف XML التالي:

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/spellchecker_name"
        android:settingsActivity="com.example.SpellCheckerSettingsActivity">
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="en”
    />
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="fr”
    />
</spell-checker>

تحدد البيانات الوصفية النشاط الذي يستخدمه المدقق الإملائي للتحكم في الإعدادات. كما أنه يحدد الأنواع الفرعية للمدقق الإملائي. في هذه الحالة، تحدد الأنواع الفرعية اللغات التي يمكن للمدقق الإملائي التعامل معها.

الوصول إلى خدمة المدقق الإملائي من أحد العملاء

التطبيقات التي تستخدم طرق عرض TextView وEditText تستفيد تلقائيًا من ميزة التدقيق الإملائي، لأن TextView يستخدم المدقق الإملائي تلقائيًا:

صورة توضح كيفية تفعيل المدقق الإملائي تلقائيًا في EditText
الشكل 2. التدقيق الإملائي في EditText.

ومع ذلك، قد ترغب في التفاعل مباشرة مع خدمة المدقق الإملائي في حالات أخرى. يوضح الرسم التخطيطي التالي تدفق التحكم للتفاعل مع خدمة المدقق الإملائي:

صورة تعرض رسمًا بيانيًا للتفاعل مع خدمة المدقق الإملائي
الشكل 3. التفاعل مع خدمة المدقق الإملائي.

يحتوي محرِّر طريقة الإدخال اللاتينية في مشروع البرامج المفتوحة المصدر على Android على مثال للتدقيق الإملائي.