כלי לעריכת טקסט בהתאמה אישית הם תצוגות שאינן
EditText
רכיבים או
WebView
ווידג'טים של טקסט
למרות זאת תומכות בקלט טקסט באמצעות
onCreateInputConnection()
קריאה חוזרת (callback), שנשלחת כשמתמקדים בתצוגה והמערכת מבקשת
InputConnection
לצפייה.
קריאה אל
onCheckIsTextEditor()
מעורך טקסט בהתאמה אישית אמור להחזיר true
.
תמיכה בכתיבה ידנית בסטיילוס בעורכי טקסט בהתאמה אישית
Android 14 (רמת API 34) ואילך עם תמיכה בקלט סטיילוס ב-Android רגיל רכיבי הזנת טקסט כברירת מחדל (למידע נוסף, ניתן לעיין במאמר קלט סטיילוס בטקסט ). עם זאת, שדות מותאמים אישית להזנת טקסט (או עורכים) מחייבים פיתוח נוסף.
כדי ליצור כלי לעריכת טקסט בהתאמה אישית, מבצעים את הפעולות הבאות:
- הפעלת התחלת כתב יד
- הצהרה על תמיכה בכתיבה ידנית
- תמיכה בתנועות לכתיבה ידנית (בחירה, מחיקה, הוספה וכו')
- ספק את מיקום הסמן ונתוני מיקום אחרים ל-IME
- הצגת הסמל של העברת העכבר מעל לכתיבה ידנית בסטיילוס
הפעלת התחלת כתב יד
אם תצוגה מורכבת מכלי אחד בלבד לעריכת טקסט, מערכת התצוגה יכולה להפעיל אוטומטית כתב יד בסטיילוס בתצוגה. אחרת, התצוגה חייבת להטמיע לוגיקה משלו להפעלת כתב יד.
הפעלה אוטומטית של כתב יד
אם בתצוגה מוצג כלי לעריכת טקסט יחיד ולא תוכן אחר, התצוגה יכולה
להפעלה האוטומטית של כתב היד במערכת של התצוגה, על ידי התקשרות
setAutoHandwritingEnabled(true)
כשכתב יד אוטומטי מופעל, תנועת הסטיילוס מתחילה במקום כלשהו בתצוגה גבולות לכתיבה ידנית מפעיל באופן אוטומטי את מצב כתב היד. שיטת הקלט עורך (IME) מקבל אירועי תנועת הסטיילוס ושומר את הטקסט המזוהה.
הפעלה של כתב יד בהתאמה אישית
אם תצוגה כוללת כמה כלי עריכה של טקסט או תוכן, בנוסף לטקסט יחיד על התצוגה ליישם לוגיקה משלו של התחלת כתב יד:
ביטול ההסכמה להפעלה אוטומטית של כתב יד במערכת התצוגה באמצעות שיחה
setAutoHandwritingEnabled(false)
מעקב אחרי כל עורכי הטקסט שגלויים בתצוגה.
מעקב אחר אירועי תנועה שהתקבלו בתצוגה ב-
dispatchTouchEvent()
כשתנועת סטיילוס מתרחשת בתוך הגבולות של כתב היד בכלי לעריכת טקסט, מתמקדים בכלי לעריכת טקסט (אם המיקוד לא מתמקד כבר).
אם העורך לא היה כבר ממוקד, הפעל מחדש את ה-IME של העורך עם עורך חדש התקשרות אל התוכן
InputMethodManager#restartInput()
כדי להתחיל את הפעילות של כתיבה ידנית בסטיילוס, צריך להתקשר
InputMethodManager#startStylusHandwriting()
אם הכלי לעריכת טקסט נמצא בתוך תצוגה שיש בה אפשרות גלילה, תנועת סטיילוס
גבולות כתב היד של העורך צריכים להיחשב ככתב יד, ולא כגלילה. כדאי להשתמש
ViewParent#requestDisallowInterceptTouchEvent()
כדי למנוע מתצוגת הורה שניתנת לגלילה ליירט אירועי מגע מטקסט
עם הרשאת עריכה.
פרטי ה-API
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
ממשקי API.אם ה-IME לא יכול לעבור למצב כתב יד, הפעלת השיטה הזו היא ללא הפעלה.
הצהרה על תמיכה בכתיבה ידנית
כשממלאים את
ארגומנט EditorInfo
מתוך
View#onCreateInputConnection(EditorInfo)
שיחה
setStylusHandwritingEnabled()
כדי ליידע את ה-IME שעורך הטקסט תומך בכתב יד.
הצהרה על תנועות נתמכות עם
setSupportedHandwritingGestures()
וגם
setSupportedHandwritingGesturePreviews()
תמיכה בתנועות כתב יד
רכיבי IME יכולים לתמוך בתנועות שונות של כתב יד, כמו הקפת טקסט כדי לבחור או לשרבט על הטקסט כדי למחוק אותו.
הטמעה של עורכים בהתאמה אישית
InputConnection#performHandwritingGesture()
וגם
InputConnection#previewHandwritingGesture()
כדי לתמוך
HandwritingGesture
שונים, כמו
SelectGesture
,
DeleteGesture
, וגם
InsertGesture
.
צריך להצהיר על תנועות כתב יד נתמכות כשממלאים את הארגומנט EditorInfo
מתוך View#onCreateInputConnection(EditorInfo)
(אפשר לעיין בכתב היד של ההצהרה
support).
פרטי ה-API
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)
כדי לגשת לסמל הכתיבה הידנית בסטיילוס של המערכת.