محررات النص المخصصة هي طرق عرض لا
مكونات EditText
أو
WebView
أدوات نصية ولكن
وندعم إدخال النص من خلال تنفيذ
onCreateInputConnection()
يتم استدعاء هذه العملية عندما يتم التركيز على إحدى طرق العرض ويطلب النظام
InputConnection
للعرض.
مكالمة إلى
onCheckIsTextEditor()
من محرِّر نصوص مخصّص يجب أن يعرض true
إتاحة الكتابة بخط اليد بقلم الشاشة في برامج تحرير النصوص المخصّصة
نظام التشغيل Android 14 (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأحدث متوافقة مع قلم الشاشة في نظام Android العادي مكوّنات إدخال النص تلقائيًا (راجِع إدخال قلم الشاشة في النص الحقول). ومع ذلك، تتطلب حقول إدخال النص المخصّصة (أو أدوات التحرير) تطويرًا إضافيًا.
لإنشاء محرِّر نصوص مخصّص، اتّبِع الخطوات التالية:
- تفعيل بدء الكتابة بخط اليد
- إعلان إتاحة الكتابة بخط اليد
- دعم إيماءات الكتابة بخط اليد (التحديد والحذف والإدراج وما إلى ذلك)
- توفير موقع المؤشر وبيانات الموضع الأخرى إلى أداة IME
- عرض رمز التمرير للكتابة بخط اليد بقلم الشاشة
تفعيل بدء الكتابة بخط اليد
إذا كانت طريقة العرض تتألف فقط من محرر نصوص واحد، فيمكن لنظام العرض بدء الكتابة بخط اليد بقلم الشاشة تلقائيًا للعرض بخلاف ذلك، يجب أن وتنفيذ منطق بدء الكتابة بخط اليد الخاص به.
البدء التلقائي للكتابة بخط اليد
إذا كانت طريقة العرض تعرض محرِّر نصوص واحدًا بدون أي محتوى آخر، يمكن لطريقة العرض
إلى البدء التلقائي للكتابة بخط اليد بنظام العرض من خلال استدعاء
setAutoHandwritingEnabled(true)
مع تمكين الكتابة اليدوية، تبدأ حركة قلم الشاشة من أي مكان داخل إطار العرض تؤدي حدود الكتابة بخط اليد إلى بدء وضع الكتابة بخط اليد تلقائيًا. أسلوب الإدخال محرر (IME) أحداث حركة قلم الشاشة وتنفيذ النص الذي تم التعرف عليه.
![حقل إدخال يتضمّن مستطيلاً يحيط به يشير إلى حدود رصد أحداث حركة قلم الشاشة.](https://developer.android.com/static/images/develop/ui/compose/touch-input/stylus-input/shared/edittext_handwriting_bounds.png?authuser=9&hl=ar)
EditText
بدء الكتابة بخط اليد المخصص
إذا كانت طريقة العرض تتضمّن عدّة برامج تحرير أو محتوى للنصوص بالإضافة إلى نص واحد محرِّر، يجب أن تنفذ طريقة العرض منطق بدء الكتابة بخط اليد على النحو التالي:
إيقاف البدء التلقائي للكتابة بخط اليد في نظام العرض من خلال استدعاء
setAutoHandwritingEnabled(false)
تتبع جميع برامج تحرير النصوص المرئية في العرض.
مراقبة أحداث الحركة التي تم تلقّيها من خلال العرض في
dispatchTouchEvent()
عندما تحدث حركة قلم الشاشة داخل حدود الكتابة بخط اليد في محرر النصوص، تركيز محرر النصوص (إذا لم يكن التركيز عليه بالفعل).
إذا لم يكن المحرر مركّزًا بالفعل، فأعد تشغيل أداة IME للمحرر باستخدام المحتوى عن طريق استدعاء
InputMethodManager#restartInput()
بدء جلسة الكتابة بخط اليد بقلم الشاشة من خلال الاتصال
InputMethodManager#startStylusHandwriting()
إذا كان محرر النصوص داخل عرض قابل للتمرير، فحركة قلم الشاشة داخل
يجب اعتبار حدود الكتابة بخط اليد في المحرر كتابة بخط اليد، وليس التمرير. استخدام
ViewParent#requestDisallowInterceptTouchEvent()
لمنع عرض الأصل القابل للتمرير من اعتراض أحداث اللمس في النص
المحرِّر.
تفاصيل واجهة برمجة التطبيقات
MotionEvent#getToolType()
— يشير إلى ما إذا كانMotionEvent
من قلم شاشة، في هذه الحالة تكون القيمة المعروضة هيTOOL_TYPE_STYLUS
أوTOOL_TYPE_ERASER
.InputMethodManager#isStylusHandwritingAvailable()
— يشير هذا الحقل إلى ما إذا كانت أداة IME تتوافق مع الكتابة بخط اليد بقلم الشاشة. الاتصال بهذا الاسم طريقة الدفع قبل كل استدعاء إلىInputMethodManager#startStylusHandwriting()
بسبب تغيّر مدى توفّر ميزة "الكتابة بخط اليد"InputMethodManager#startStylusHandwriting()
— يؤدي إلى دخول أداة IME إلى وضع الكتابة بخط اليد. إنّACTION_CANCEL
يتم نقل حدث حركة إلى التطبيق لإلغاء الإيماءة الحالية. قلم شاشة أحداث الحركة إلى التطبيق بعد الآن.أحداث حركة قلم الشاشة للإيماءة الحالية التي تم إرسالها إلى تتم إعادة توجيه التطبيق إلى أداة IME. يجب استخدام أداة IME لعرض حبر قلم الشاشة. النافذة التي يتلقّى من خلالها أداة IME جميع كائنات
MotionEvent
التالية. تنفّذ أداة IME النصوص المكتوبة بخط اليد التي تم التعرّف عليها باستخدامInputConnection
واجهات برمجة التطبيقات.إذا تعذَّر على أداة IME الدخول إلى وضع الكتابة بخط اليد، لن يتم استدعاء هذه الطريقة.
إعلان إتاحة الكتابة بخط اليد
عند ملء
الوسيطة EditorInfo
من
مكالمة View#onCreateInputConnection(EditorInfo)
setStylusHandwritingEnabled()
لإبلاغ أداة IME بأنّ محرِّر النصوص يتيح الكتابة بخط اليد.
توضيح الإيماءات المتوافقة باستخدام
setSupportedHandwritingGestures()
أو
setSupportedHandwritingGesturePreviews()
دعم إيماءات الكتابة بخط اليد
تتيح أدوات IME استخدام العديد من إيماءات الكتابة بخط اليد، مثل وضع دائرة حول النص لتحديده. أو الكتابة فوق النص لحذفه.
تنفيذ المحرِّرين المخصّصين
InputConnection#performHandwritingGesture()
أو
InputConnection#previewHandwritingGesture()
لدعم مختلف
HandwritingGesture
أنواعها، مثل
SelectGesture
،
DeleteGesture
،
InsertGesture
.
يُرجى تعريف إيماءات الكتابة بخط اليد المتوافقة عند ملء الوسيطة EditorInfo
.
من View#onCreateInputConnection(EditorInfo)
(راجع بيان الكتابة بخط اليد)
الدعم).
تفاصيل واجهة برمجة التطبيقات
InputConnection#performHandwritingGesture(HandwritingGesture, Executor, IntConsumer)
— لتنفيذ الإيماءات. تحتوي الوسيطةHandwritingGesture
على معلومات الموقع التي يمكنك استخدامها لتحديد مكان في النص تنفيذ الإيماءة. على سبيل المثال، يوفّرSelectGesture
RectF
الذي نطاق النص المحدد، وتوفرInsertGesture
الكائنPointF
الذي يحدد إزاحة النص المراد إدراج النص عنده.يمكنك استخدام
Executor
مَعلماتIntConsumer
إرسال نتيجة العملية. عندما ينظر كل من المنفذ يتم توفير وسيطات المستهلك، استخدم المنفذ لاستدعاءIntConsumer#accept()
، على سبيل المثال:executor.execute { consumer.accept(HANDWRITING_GESTURE_RESULT_SUCCESS) }
HandwritingGesture#getFallbackText()
— يتم توفير نص احتياطي يجريه أداة IME في موضع المؤشر في حال عدم توفّره. النص المناسب أسفل منطقة إيماءة الكتابة بخط اليد.يتعذر على محرر أسلوب الإدخال (IME) أحيانًا تحديد ما إذا كانت إيماءة قلم الشاشة التي تهدف إلى تنفيذ عملية بإيماءة أو إلى كتابة نص يدويًا. نص مخصّص يكون المحرّر مسؤولاً عن تحديد نية المستخدم وتنفيذه. الإجراء المناسب (بناءً على السياق) في مكان الإيماءة.
على سبيل المثال، إذا لم يتمكن أداة IME من التأكد مما إذا كان المستخدم يعتزم رسم رمز علامة إقحام لأسفل ⋁ لتنفيذ إيماءة إدراج مسافة أو لكتابة علامة الحرف "v" يمكن لأداة IME إرسال الرمز
InsertGesture
مع النص الاحتياطي "v".يجب أن يحاول المحرر أولاً تنفيذ إيماءة إدراج المسافات. إذا كانت يتعذّر تنفيذ الإيماءة (على سبيل المثال، لا يتوفّر نص في الموقع الجغرافي) محدد)، يجب أن يعود المحرر لإدراج "v" عند مؤشر الماوس الموقع.
InputConnection#previewHandwritingGesture(PreviewableHandwritingGesture, CancellationSignal)
— لمعاينة إيماءة مستمرة. على سبيل المثال، عندما يبدأ المستخدم في رسم دائرة حول نص ما، يمكن إجراء معاينة مباشرة للتحديد الناتج ويتم عرضه وتحديثه باستمرار مع استمرار المستخدم في الرسم. معينة فقط أنواع الإيماءات قابلة للمعاينة (راجعPreviewableHandwritingGesture
).يمكن لأداة IME استخدام المعلمة
CancellationSignal
لإلغاء معاينة. في حال أدت أحداث أخرى إلى التأثير في المعاينة (على سبيل المثال، يتم تغيير النص ظهور أوامرInputConnection
آليًا أو جديدة)، والمحرّر المخصَّص إلغاء المعاينة.إيماءات المعاينة مخصصة للعرض فقط ويجب ألا تغيّر إعدادات المحرّر الولاية. على سبيل المثال، تخفي معاينة
SelectGesture
الملف الحالي للمحرّر نطاق التحديد ويسلط الضوء على نطاق معاينة الإيماءة. ولكن بمجرد أن عند إلغاء المعاينة، على المحرر استعادة نطاق التحديد السابق.
تقديم موقع المؤشر وبيانات الموضع الأخرى
في وضع الكتابة بخط اليد، يمكن لأداة IME طلب موقع المؤشر وبيانات الموضع الأخرى
استخدام
InputConnection#requestCursorUpdates()
يستجيب المحرِّر المخصّص بطلب
InputMethodManager#updateCursorAnchorInfo(View,
CursorAnchorInfo)
البيانات في
CursorAnchorInfo
ذات الصلة بالكتابة بخط اليد بقلم الشاشة من خلال ما يلي
CursorAnchorInfo.Builder
الطرق:
setInsertionMarkerLocation()
— لتعيين موقع المؤشر. يستخدم أداة IME القيمة لإضافة تأثيرات متحركة. الكتابة بخط اليد إلى موقع المؤشر.setEditorBoundsInfo()
— لضبط حدود المحرِّر وحدود الكتابة بخط اليد. يستخدم أداة IME هذه البيانات لوضع شريط أدوات الكتابة اليدوية في أداة IME على الشاشة.addVisibleLineBounds()
— يضبط حدود كل سطور النص المرئية (أو المرئية جزئيًا) المحرر. يستخدم أداة IME حدود الأسطر لتحسين الدقة في التعرّف على إيماءات الكتابة بخط اليد.setTextAppearanceInfo()
— لتعيين مظهر النص بمعلومات مشتقة من النص حقل إدخال ويستخدم أداة IME المعلومات لتصميم حبر الكتابة بخط اليد.
عرض رمز التمرير للكتابة بخط اليد بقلم الشاشة
عرض رمز التمرير للكتابة بخط اليد بقلم الشاشة عند تمرير قلم الشاشة فوق
حدود الكتابة بخط اليد في محرِّر النصوص المخصّص وميزات أداة IME المحدّدة
الكتابة بخط اليد بقلم الشاشة
(InputMethodManager#isStylusHandwritingAvailable()
).
تجاهُل
View#onResolvePointerIcon()
للحصول على رمز التمرير للكتابة بخط اليد بقلم الشاشة. في الإلغاء، اطلب
PointerIcon.getSystemIcon(context, PointerIcon.TYPE_HANDWRITING)
للدخول إلى رمز التمرير بالكتابة بخط اليد بقلم الشاشة.