محرر أسلوب الإدخال (IME) هو عنصر تحكم للمستخدم يتيح للمستخدمين إدخال نص. يوفّر Android وهو إطار إدخال وأساليب إدخال قابل للتوسع يتيح للتطبيقات توفير طرق إدخال بديلة للمستخدمين، مثل لوحات المفاتيح على الشاشة أو إدخال الكلام. بعد تثبيت أدوات IME، يمكن للمستخدم اختيار واحدة من إعدادات النظام واستخدامها في النظام بأكمله. لا يمكن تفعيل أكثر من أداة IME واحدة في كل مرة.
لإضافة أداة IME إلى نظام Android، يمكنك إنشاء تطبيق Android يحتوي على فئة
يمتد
InputMethodService
بالإضافة إلى ذلك، تقوم عادةً بإنشاء "إعدادات" النشاط الذي يمرر الخيارات إلى خدمة IME. إِنْتَ
أيضًا تحديد واجهة مستخدم الإعدادات والتي يتم عرضها كجزء من إعدادات النظام.
تتناول هذه الصفحة المواضيع التالية:
- مراحل نشاط أداة IME
- توضيح مكونات أداة IME في بيان التطبيق
- واجهة برمجة تطبيقات IME
- تصميم واجهة مستخدم IME
- إرسال نص من أداة IME إلى تطبيق
- استخدام الأنواع الفرعية لأداة IME
- اعتبارات أخرى لأداة IME
إذا لم يسبق لك استخدام أدوات IME، فيمكنك قراءة المقالة التمهيدية أساليب الإدخال على الشاشة أولاً.
مراحل نشاط أداة IME
يوضِّح المخطّط التالي دورة حياة أداة IME:
![صورة تعرض دورة حياة أداة IME.](https://developer.android.google.cn/static/resources/articles/images/inputmethod_lifecycle_image.png?authuser=9&hl=ar)
توضّح الأقسام التالية كيفية تنفيذ واجهة المستخدم والرمز المرتبط بأداة IME دورة الحياة هذه.
تعريف مكونات IME في البيان
في نظام Android، يكون أداة IME هو تطبيق Android يحتوي على خدمة IME خاصة. تشير رسالة الأشكال البيانية
أن يفصح ملف البيان عن الخدمة، وأن يطلب الأذونات اللازمة، ويقدم
فلتر أهداف يتطابق مع الإجراء action.view.InputMethod
، ويقدّم بيانات وصفية
تحدد خصائص أداة IME. بالإضافة إلى ذلك، يمكن توفير واجهة إعدادات تتيح
المستخدم تعديل سلوك أداة IME، يمكنك تحديد "إعدادات" النشاط الذي يمكن إطلاقه من
إعدادات النظام.
يعرّف المقتطف التالي عن خدمة أداة IME. يطلب الإذن بالوصول
BIND_INPUT_METHOD
للسماح للخدمة بربط أداة IME بالنظام، يتم إعداد فلتر أهداف يتطابق مع الإجراء.
android.view.InputMethod
، وتحدّد البيانات الوصفية لأداة IME:
<!-- Declares the input method service. --> <service android:name="FastInputIME" android:label="@string/fast_input_label" android:permission="android.permission.BIND_INPUT_METHOD"> <intent-filter> <action android:name="android.view.InputMethod" /> </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/method" /> </service>
يفصح المقتطف التالي عن نشاط الإعدادات لأداة IME. وتحتوي على فلتر أهداف
ACTION_MAIN
الذي
إلى أن هذا النشاط هو نقطة الإدخال الرئيسية لتطبيق IME:
<!-- Optional: an activity for controlling the IME settings. --> <activity android:name="FastInputIMESettings" android:label="@string/fast_input_settings"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity>
يمكنك أيضًا إتاحة الوصول إلى إعدادات أداة IME مباشرةً من واجهة المستخدم الخاصة بها.
واجهة برمجة التطبيقات لأسلوب الإدخال
تتوفر الفئات الخاصة بأدوات IME في
android.inputmethodservice
أو
android.view.inputmethod
حزم. الفئة KeyEvent
هي
أهمية في التعامل مع أحرف لوحة المفاتيح.
يُعد الجزء المركزي من أداة IME مكون خدمة - فئة تمتد
InputMethodService
بالإضافة إلى تطبيق دورة حياة الخدمة العادية،
استدعاءات لتوفير واجهة مستخدم أداة IME، والتعامل مع البيانات التي أدخلها المستخدم، وتقديم النص إلى
الذي يتم التركيز عليه. توفّر الفئة InputMethodService
تلقائيًا معظم
لإدارة حالة أداة IME ورؤيتها والتواصل مع
حقل إدخال
الفئات التالية مهمة أيضًا:
BaseInputConnection
-
تحدد قناة الاتصال من
InputMethod
إلى التطبيق الذي يتلقى بياناته. يمكنك استخدامه لقراءة النص حول المؤشر، وتطبيق النص في مربع النص، وإرسال الأحداث الرئيسية الأولية إلى التطبيق. يجب أن تعمل التطبيقات على توسيع هذه الفئة بدلاً من تنفيذ الواجهة الأساسيةInputConnection
KeyboardView
-
امتداد لـ
View
لعرض لوحة مفاتيح والاستجابة لأحداث إدخالات المستخدم. يتم تحديد تخطيط لوحة المفاتيح من خلال مثال علىKeyboard
, والتي يمكنك تحديدها في ملف XML.
تصميم واجهة مستخدم أسلوب الإدخال
هناك عنصران مرئيان رئيسيان لأداة IME: عرض الإدخال المرشحين. ما عليك سوى تنفيذ العناصر ذات الصلة أسلوب الإدخال الذي تصممه.
عرض الإدخال
طريقة عرض الإدخال هي واجهة المستخدم التي يُدخل فيها المستخدم نصًا في شكل نقرات على المفتاح أو الكتابة بخط اليد أو
الإيماءات. وعند عرض أداة IME لأول مرة، يستدعي النظام
onCreateInputView()
معاودة الاتصال. أثناء تنفيذ هذه الطريقة، أنشئ التنسيق الذي تريد عرضه في أداة IME
نافذة وإعادة التخطيط إلى النظام. يوضح المقتطف التالي مثالاً على تنفيذ
طريقة onCreateInputView()
:
Kotlin
override fun onCreateInputView(): View { return layoutInflater.inflate(R.layout.input, null).apply { if (this is MyKeyboardView) { setOnKeyboardActionListener(this@MyInputMethod) keyboard = latinKeyboard } } }
Java
@Override public View onCreateInputView() { MyKeyboardView inputView = (MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null); inputView.setOnKeyboardActionListener(this); inputView.setKeyboard(latinKeyboard); return inputView; }
في هذا المثال، MyKeyboardView
هو مثال على تنفيذ مخصّص
KeyboardView
تعرض قيمة Keyboard
.
عرض المرشحين
طريقة عرض العناصر المرشحة هي واجهة المستخدم التي تعرض فيها أداة IME تصحيحات الكلمات أو الاقتراحات المحتملة
ليختارها المستخدم وفي دورة حياة أداة IME، يستدعي النظام
onCreateCandidatesView()
عندما يكون جاهزًا لعرض طريقة عرض العناصر المرشحة. أثناء تنفيذ هذه الطريقة، يمكنك إرجاع
يعرض اقتراحات الكلمات، أو يعرض قيمة خالية إذا كنت لا تريد عرض أي شيء. خالية
والاستجابة هو السلوك الافتراضي، لذا لن تضطر إلى تنفيذه إذا لم تقدم
الاقتراحات.
اعتبارات تصميم واجهة المستخدم
يصف هذا القسم بعض اعتبارات تصميم واجهة المستخدم لأدوات IME.
التعامل مع أحجام الشاشات المتعددة
يجب أن تتميز واجهة المستخدم لأداة IME بأحجام مختلفة للشاشة والتعامل مع كلا الوضعين الأفقيين. والاتجاهات العمودية. في وضع محرر أسلوب الإدخال (IME) الذي لا يظهر بملء الشاشة، اترك مساحة كافية للتطبيق عرض الحقل النصي وأي سياق مرتبط به، بحيث لا يشغل أكثر من نصف الشاشة أداة IME. وما مِن مشكلة في هذا الوضع عند استخدام وضع IME بملء الشاشة.
التعامل مع أنواع الإدخال المختلفة
تتيح لك الحقول النصية في Android تحديد نوع إدخال محدد، مثل النص الحر أو الأرقام أو عناوين URL وعناوين البريد الإلكتروني وسلاسل البحث. عند تنفيذ أداة IME جديدة، يجب رصد نوع الإدخال لكل وتوفير الواجهة المناسبة له. ومع ذلك، لن تحتاج إلى إعداد أداة IME التحقق مما إذا كان المستخدم يُدخل نصًا صالحًا لنوع الإدخال هذه هي مسئولية تطبيق يمتلك حقل النص.
على سبيل المثال، في ما يلي الواجهة التي يوفرها محرر أسلوب الإدخال (IME) اللاتيني لنص نظام Android الأساسي الإدخال:
![صورة تعرض إدخال نص على أداة تحرير أسلوب إدخال لاتينية](https://developer.android.google.cn/static/images/ui/text_input.png?authuser=9&hl=ar)
في ما يلي الواجهة التي يوفرها محرر أسلوب الإدخال (IME) اللاتيني لنظام Android الأساسي الإدخال الرقمي:
![صورة تعرض إدخالاً رقميًا على أداة IME لاتينية](https://developer.android.google.cn/static/images/ui/numeric_input.png?authuser=9&hl=ar)
عندما يتلقّى حقل إدخال التركيز ويبدأ أداة IME، يستدعي النظام.
onStartInputView()
,
عنصر واحد (EditorInfo
)
يحتوي على تفاصيل حول نوع الإدخال والسمات الأخرى لحقل النص. في هذا الكائن،
الـ
inputType
على نوع إدخال حقل النص.
الحقل inputType
هو int
الذي يحتوي على أنماط بت لمختلف التنسيقات.
إعدادات نوع الإدخال. لاختبار نوع إدخال حقل النص، يجب إضافة تأثير ثابت
TYPE_MASK_CLASS
,
النحو التالي:
Kotlin
inputType and InputType.TYPE_MASK_CLASS
Java
inputType & InputType.TYPE_MASK_CLASS
يمكن أن يحتوي نمط البت لنوع الإدخال على قيمة من عدة قيم، منها:
TYPE_CLASS_NUMBER
- حقل نصي لإدخال الأرقام كما هو موضح في الشكل 3، يعرض أداة IME باللغة اللاتينية لوحة أرقام للحقول من هذا النوع.
TYPE_CLASS_DATETIME
- حقل نصي لإدخال التاريخ والوقت.
TYPE_CLASS_PHONE
- حقل نصي لإدخال أرقام الهواتف:
TYPE_CLASS_TEXT
- حقل نصي لإدخال أي أحرف مسموح بها.
يتم وصف هذه الثوابت بمزيد من التفصيل في المستندات المرجعية
InputType
يمكن أن يحتوي الحقل inputType
على وحدات بت أخرى تشير إلى أحد خيارات الحقل النصي.
النوع، مثل:
TYPE_TEXT_VARIATION_PASSWORD
- أحد خيارات
TYPE_CLASS_TEXT
لإدخال كلمات المرور يعرض أسلوب الإدخال استنادًا إلى النص بدلاً من النص الفعلي. TYPE_TEXT_VARIATION_URI
- صيغة من
TYPE_CLASS_TEXT
لإدخال عناوين URL على الويب ومورِّد موحَّد آخر المعرّفات (URI). TYPE_TEXT_FLAG_AUTO_COMPLETE
- صيغة لـ
TYPE_CLASS_TEXT
لإدخال نصّ التطبيق الإكمال التلقائي من قاموس أو بحث أو أي مرفق آخر.
عليك إضافة القيمة الثابتة المناسبة إلى inputType
عند اختبار هذه الصيغ. تشير رسالة الأشكال البيانية
تم إدراج الثوابت المتاحة للكمامات في المستندات المرجعية للدالة InputType
.
إرسال رسالة نصية إلى التطبيق
أثناء إدخال المستخدم للنص باستخدام أداة IME، يمكنك إرسال نص إلى التطبيق من خلال إرسال
الأحداث الرئيسية أو عن طريق تعديل النص حول المؤشر في الحقل النصي للتطبيق. في كلتا الحالتين،
استخدام مثيل InputConnection
لتسليم النص. للحصول على هذا المثيل، اتصل
InputMethodService.getCurrentInputConnection()
تعديل النص حول المؤشر
عند التعامل مع تعديل النص الموجود، فإن بعض الطرق المفيدة في
BaseInputConnection
هي ما يلي:
-
getTextBeforeCursor()
- عرض
CharSequence
الذي يحتوي على عدد الأحرف المطلوبة قبل موضع المؤشر الحالي. -
getTextAfterCursor()
- عرض
CharSequence
يحتوي على عدد الأحرف المطلوبة التالية الموضع الحالي للمؤشر -
deleteSurroundingText()
- حذف العدد المحدّد من الأحرف قبل موضع المؤشر الحالي وبعده
-
commitText()
- تطبيق
CharSequence
على حقل النص وضبط موضع جديد للمؤشر
على سبيل المثال، يوضح المقتطف التالي كيفية استبدال الأحرف الأربعة إلى يسار المؤشر مع النص "مرحبًا!":
Kotlin
currentInputConnection.also { ic: InputConnection -> ic.deleteSurroundingText(4, 0) ic.commitText("Hello", 1) ic.commitText("!", 1) }
Java
InputConnection ic = getCurrentInputConnection(); ic.deleteSurroundingText(4, 0); ic.commitText("Hello", 1); ic.commitText("!", 1);
دعم تأليف النص قبل الالتزام
إذا كان أداة IME يتنبأ بنص أو يتطلب خطوات متعددة لإنشاء حرف رسومي أو كلمة، يمكنك عرض
التقدم في حقل النص إلى أن ينفّذ المستخدم الكلمة، ومن ثم يمكنك استبدال النص
تكوينها مع النص المكتمل. يمكنك التعامل بشكل خاص مع النص عن طريق إضافة
span عند تمريره إلى
setComposingText()
يعرض المقتطف التالي كيفية إظهار التقدّم في حقل نصي:
Kotlin
currentInputConnection.also { ic: InputConnection -> ic.setComposingText("Composi", 1) ic.setComposingText("Composin", 1) ic.commitText("Composing ", 1) }
Java
InputConnection ic = getCurrentInputConnection(); ic.setComposingText("Composi", 1); ic.setComposingText("Composin", 1); ic.commitText("Composing ", 1);
اعتراض الأحداث الرئيسية للأجهزة
على الرغم من أنّ نافذة أسلوب الإدخال لا تتضمّن تركيزًا صريحًا، يتم تلقّي الأحداث الرئيسية للجهاز. أولاً ويمكنك استهلاكها أو إعادة توجيهها إلى التطبيق. على سبيل المثال، قد ترغب في يمكنك استخدام مفاتيح الاتجاهات للتنقل داخل واجهة المستخدم من أجل اختيار الاقتراحات أثناء التركيب. قد تحتاج أيضًا إلى احتجاز مفتاح الرجوع لإغلاق أي مربعات حوار تنشأ عن أسلوب الإدخال نافذة.
لاعتراض مفاتيح الأجهزة، عليك إلغاء
onKeyDown()
أو
onKeyUp()
يمكنك استدعاء طريقة super()
للمفاتيح التي لا تريد التعامل معها بنفسك.
إنشاء نوع فرعي لأداة IME
تتيح الأنواع الفرعية لأداة IME الكشف عن أوضاع إدخال ولغات متعددة متاحة في أداة IME. يمكن للنوع الفرعي تمثل ما يلي:
- لغة مثل en_US أو fr_FR
- وضع إدخال، مثل الصوت أو لوحة المفاتيح أو الكتابة بخط اليد
- أنماط إدخال أو نماذج أو خصائص إدخال أخرى خاصة بأداة IME، مثل 10-key أو QWERTY تنسيقات لوحة المفاتيح
يمكن أن يكون الوضع أي نص، مثل "لوحة المفاتيح". أو "صوت". كما يمكن أن يكشف النوع الفرعي عن مجموعة منها.
يتم استخدام معلومات النوع الفرعي لمربع حوار أداة تبديل IME المتاح من شريط الإشعارات وإعدادات IME. تُتيح المعلومات لإطار العمل أيضًا إظهار نوع فرعي معيّن من أداة IME مباشرةً. عند إنشاء أداة IME، استخدم منشأة النوع الفرعي، لأنها تساعد المستخدم في تحديد للتبديل بين اللغات والأوضاع المختلفة لأداة IME.
حدد الأنواع الفرعية لأحد ملفات موارد XML الخاصة بطريقة الإدخال، وذلك باستخدام
العنصر <subtype>
. يعمل مقتطف الرمز التالي على تعريف أداة IME من خلال نوعين فرعيين:
نوع فرعي للوحة المفاتيح للغة الإنجليزية (الولايات المتحدة) ونوع فرعي آخر للوحة المفاتيح للغة الفرنسية
لغة فرنسا:
<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.softkeyboard.Settings" android:icon="@drawable/ime_icon"> <subtype android:name="@string/display_name_english_keyboard_ime" android:icon="@drawable/subtype_icon_english_keyboard_ime" android:languageTag="en-US" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="somePrivateOption=true" /> <subtype android:name="@string/display_name_french_keyboard_ime" android:icon="@drawable/subtype_icon_french_keyboard_ime" android:languageTag="fr-FR" android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="someVariable=30,someInternalOption=false" /> <subtype android:name="@string/display_name_german_keyboard_ime" ... /> </input-method>
للتأكّد من تسمية الأنواع الفرعية بشكل صحيح في واجهة المستخدم، استخدِم "%s" للحصول على تصنيف نوع فرعي هو نفسه تصنيف اللغة للنوع الفرعي. يتضّح ذلك في مقتطفَي الرمز التاليَين. تشير رسالة الأشكال البيانية يعرض المقتطف الأول جزءًا من ملف XML لطريقة الإدخال:
<subtype android:label="@string/label_subtype_generic" android:imeSubtypeLocale="en_US" android:icon="@drawable/icon_en_us" android:imeSubtypeMode="keyboard" />
المقتطف التالي هو جزء من ملف strings.xml
لأداة IME. مورد السلسلة
label_subtype_generic
، الذي يستخدمه تعريف واجهة المستخدم لطريقة الإدخال لضبط
على النحو التالي:
<string name="label_subtype_generic">%s</string>
يؤدي هذا الإعداد إلى مطابقة الاسم المعروض للنوع الفرعي مع إعداد اللغة. على سبيل المثال، في أي باللغة الإنجليزية، يكون الاسم المعروض هو "الإنجليزية (الولايات المتحدة)".
اختَر الأنواع الفرعية لأداة IME من شريط الإشعارات.
يدير نظام Android جميع الأنواع الفرعية التي تعرضها جميع أدوات IME. يتم التعامل مع الأنواع الفرعية لأداة IME كأوضاع جهاز IME الذي ينتمي إليه. يمكن للمستخدم الانتقال من شريط الإشعارات أو تطبيق "الإعدادات" إلى بالأنواع الفرعية المتاحة لأداة IME، كما هو موضح في الشكل التالي:
![صورة تعرض قسم "اللغات إدخال قائمة النظام](https://developer.android.google.cn/static/images/ui/languages_and_input.png?authuser=9&hl=ar)
اختيار الأنواع الفرعية لأداة IME من إعدادات النظام
يستطيع المستخدم أيضًا التحكم في كيفية استخدام الأنواع الفرعية في قسم اللغة لوحة إعدادات الإدخال في إعدادات النظام:
![صورة تعرض قائمة اختيار "اللغات"](https://developer.android.google.cn/static/images/ui/languages.png?authuser=9&hl=ar)
التبديل بين الأنواع الفرعية لأداة IME
يمكنك السماح للمستخدمين بالتبديل بسهولة بين الأنواع الفرعية لأداة IME من خلال توفير مفتاح تبديل، مثل رمز لغة على شكل كرة أرضية على لوحة المفاتيح. فهذا يحسن من سهولة استخدام لوحة المفاتيح وهو مناسب للمستخدم. لتفعيل هذا التبديل، عليك اتّباع الخطوات التالية:
- تعريف
supportsSwitchingToNextInputMethod = "true"
في XML الخاص بطريقة الإدخال ملفات الموارد. يجب أن يبدو بيانك مشابهًا لمقتطف الرمز التالي:<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.softkeyboard.Settings" android:icon="@drawable/ime_icon" android:supportsSwitchingToNextInputMethod="true">
- عليك استدعاء
shouldOfferSwitchingToNextInputMethod()
. - إذا أرجعت الطريقة القيمة "صحيح"، يمكنك عرض مفتاح تبديل.
- عندما ينقر المستخدم على مفتاح التبديل، اتصل
switchToNextInputMethod()
, وتمريره خطأ. تخبر القيمة false النظام بمعالجة جميع الأنواع الفرعية بالتساوي، بغض النظر عن وما هو أداة IME التي ينتمي إليها المستخدمون. يتطلب تحديد true من النظام أن يتنقل عبر الأنواع الفرعية في أداة IME الحالية.
اعتبارات عامة لـ IME
في ما يلي بعض النقاط الأخرى التي يجب مراعاتها أثناء تنفيذ أداة IME:
- توفِّر طريقة للمستخدمين لضبط الخيارات مباشرةً من واجهة مستخدم أداة IME.
- توفير طريقة للمستخدمين للتبديل إلى أداة IME مختلفة مباشرةً من واجهة مستخدم أسلوب الإدخال، نظرًا لأنه قد يتم تثبيت العديد من أدوات IME على الجهاز.
- اعرض واجهة مستخدم IME بسرعة. يمكنك تحميل أي موارد كبيرة الحجم مسبقًا أو تحميلها عند الطلب حتى يتمكن المستخدمون يظهر أداة IME عند نقرهم على حقل نصي. موارد ذاكرة التخزين المؤقت وطرق العرض استدعاءات أسلوب الإدخال.
- حرر عمليات تخصيص كبيرة للذاكرة فور إخفاء نافذة أسلوب الإدخال، لذلك أن التطبيقات تحتوي على ذاكرة كافية لتشغيلها. استخدام رسالة متأخرة لإصدار الموارد إذا كان أداة IME مخفية لبضع ثوانٍ.
- تأكَّد من أنّه يمكن للمستخدمين إدخال أكبر عدد ممكن من الأحرف للّغة أو مكانها. المرتبط بأداة IME. قد يستخدم المستخدمون علامات الترقيم في كلمات المرور أو أسماء المستخدمين، لذا فإن أداة IME العديد من الأحرف المختلفة للسماح للمستخدمين بإدخال كلمة مرور والوصول إلى الخاص بك.