קובצי מפת תווים עיקריים (.kcm
קבצים) אחראים למיפוי שילובים
של קודי מפתח של Android עם מקשי צירוף לתווי Unicode.
קובצי פריסת מקשים ספציפיים למכשיר חובה לכל המכשירים הפנימיים (מובנים) והתקני קלט שיש להם מפתחות, אם רק כדי ליידע את המערכת מיועדת למטרה מיוחדת בלבד (לא מקלדת מלאה).
קובצי פריסת מקשים ספציפיים למכשיר הם אופציונליים למקלדות חיצוניות, וגם וברוב המקרים אין צורך בכלל. המערכת מספקת מפת תווים כללית של המפתח שמתאים למקלדות חיצוניות רבות.
אם אין קובץ זמין של פריסת מפתחות ספציפי למכשיר, המערכת צריך לבחור ברירת מחדל במקום זאת.
מיקום
קובצי מפת תווים של מפתח ממוקמים לפי ספק ה-USB, המוצר (ואופציונלית גם הגרסה) או לפי שם המכשיר להזנת קלט.
הנתיבים הבאים מפורטים לפי הסדר.
/odm/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/odm/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX.kcm
/odm/usr/keychars/DEVICE_NAME.kcm
/vendor/usr/keychars/DEVICE_NAME.kcm
/system/usr/keychars/DEVICE_NAME.kcm
/data/system/devices/keychars/DEVICE_NAME.kcm
/odm/usr/keychars/Generic.kcm
/vendor/usr/keychars/Generic.kcm
/system/usr/keychars/Generic.kcm
/data/system/devices/keychars/Generic.kcm
/odm/usr/keychars/Virtual.kcm
/vendor/usr/keychars/Virtual.kcm
/system/usr/keychars/Virtual.kcm
/data/system/devices/keychars/Virtual.kcm
כשיוצרים נתיב לקובץ שמכיל את שם המכשיר, כל התווים בשם המכשיר מלבד '0'-'9', 'a'-'z', 'A'-'Z', '-' או '_' מוחלפים ב-'_'.
קובץ מפת תווים כללי של המפתח
המערכת מספקת קובץ מפת תווים מובנה מיוחד בשם Generic.kcm
.
מפת התווים של המפתח נועדה לתמוך במגוון של תקנים חיצוניים
מקלדות.
אין לשנות את מפת התווים הגנרית של המפתח.
קובץ מפת תווים של מפתח וירטואלי
המערכת מספקת קובץ מפת תווים מובנה מיוחד בשם Virtual.kcm
שבו משתמשים במקלדת הווירטואלית.
המכשיר של המקלדת הווירטואלית הוא מכשיר לקליטת נתונים סינתטיים שהמזהה שלו הוא 1-
(מידע נוסף זמין בכתובת KeyCharacterMap.VIRTUAL_KEYBOARD
). הוא קיים בכל מכשירי Android
החל מ-Android Honeycomb 3.0. המטרה של המקלדת הווירטואלית
הוא לספק התקן קלט מובנה ידוע שיכול לשמש להחדרה.
באמצעות ה-IME או באמצעות כלים לבדיקה, אפילו
מכשירים שאין בהם מקלדות מובנות.
ההנחה היא שהמקלדת הווירטואלית כוללת פריסת QWERTY מלאה באופן זהה בכל המכשירים. כך מתאפשר לאפליקציות להחדיר באמצעות המקלדת הווירטואלית, ותמיד יתקבלו אותן תוצאות.
אסור לשנות את מפת התווים של המפתח הווירטואלי.
תחביר
קובץ של מפת תווים מרכזיים הוא קובץ טקסט פשוט שמורכב מסוג מקלדת וקבוצה של הצהרות מפתחות.
הצהרה על סוג המקלדת
הצהרה על סוג המקלדת מתארת את ההתנהגות הכוללת של המקלדת. קובץ של מפת תווים חייב להכיל הצהרה של סוג המקלדת. לשם הבהרה, בדרך כלל הוא ממוקם בחלק העליון של הקובץ.
type FULL
המערכת מזהה את סוגי המקלדות הבאים:
-
NUMERIC
: מקלדת נומרית (12 מקשים).מקלדת נומרית תומכת בהזנת טקסט בגישה של הקשות מרובות. ייתכן שיהיה צורך להקיש על מקש מספר פעמים כדי ליצור את האות או הסמל הרצויים.
סוג המקלדת הזה מיועד בדרך כלל להקלדת אגודל.
תואם ל-
KeyCharacterMap.NUMERIC
. -
PREDICTIVE
: מקלדת עם כל האותיות, אבל עם יותר אות אחת בכל מקש.סוג המקלדת הזה מיועד בדרך כלל להקלדת אגודל.
תואם ל-
KeyCharacterMap.PREDICTIVE
. -
ALPHA
: מקלדת שמכילה את כל האותיות, ואולי גם כמה מספרים.מקלדת אלפביתית תומכת בהזנת טקסט ישירות, אבל יכולה להיות בה גרסה מרוכזת עם גורם צורה קטן. בניגוד למקלדת
FULL
, יש ניתן לגשת לסמלים רק באמצעות בוחרי תווים מיוחדים שמופיעים במסך. בנוסף, כדי לשפר את המהירות והדיוק של ההקלדה, המסגרת מספקת עלויות מיוחדות עבור מקלדות אלפביתיות כמו שימוש באותיות רישיות באופן אוטומטי. ומקשי SHIFT ו-ALT נעולים להחלפה.סוג המקלדת הזה מיועד בדרך כלל להקלדת אגודל.
-
FULL
: מקלדת מלאה בסגנון מחשב.מקלדת מלאה פועלת כמו מקלדת PC. ניתן לגשת ישירות לכל הסמלים באמצעות לחיצה על מקשים במקלדת ללא תמיכה במסך או עלויות כאלו בתור שימוש אוטומטי באותיות רישיות.
סוג המקלדת הזה מיועד בדרך כלל להקלדה מלאה בשתי ידיים.
-
SPECIAL_FUNCTION
: מקלדת שמשמשת רק לביצוע פונקציות של בקרת המערכת במקום להקליד.מקלדת פונקציה מיוחדת מורכבת רק ממקשים שאינם מודפסים, כמו Home ו-POWER שלא משמשים בפועל להקלדה.
מפות התווים Generic.kcm
ו-Virtual.kcm
הן מקלדות FULL
.
הצהרות מרכזיות
הצהרות מרכזיות כוללות את מילת המפתח key
ולאחר מכן קוד מפתח Android
סוגריים מסולסלים פתוחים, קבוצת מאפיינים והתנהגויות וסוג מסולסל קרוב.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
מאפיינים
כל נכס מפתח יוצר מיפוי ממפתח להתנהגות. כדי להפוך את קובצי מפת תווים מרכזיים יותר קומפקטיים יותר, ניתן למפות כמה מאפיינים ולהפריד ביניהן באמצעות פסיק.
בדוגמה שלמעלה, למאפיין label
מוקצית ההתנהגות 'A'
.
באופן דומה, הנכסים ctrl
, alt
ו-meta
מוקצים בו-זמנית
את ההתנהגות none
.
המאפיינים הבאים מזוהים:
-
label
: מציינת את התווית שמודפסת פיזית על המפתח מורכב מתו אחד. זהו הערך שמחזיר השיטהKeyCharacterMap.getDisplayLabel
. -
number
: מציין את ההתנהגות (התו שיש להקליד) כאשר בתצוגת הטקסט מתמקדים, למשל, כשהמשתמש מקליד מספר טלפון.מקלדות קומפקטיות משלבות בדרך כלל כמה סמלים במקש אחד, ייתכן שמשתמשים באותו מפתח כדי להקליד
'1'
וגם'a'
או'#'
ו-'q'
, אולי. למפתחות האלה, צריך להגדיר את המאפייןnumber
כדי לציין איזה סמל צריך להקליד בתוך הקשר מספרי, אם יש כזה.כמה "מספרי" סמלים הם הספרות
'0'
עד'9'
,'#'
,'+'
,'('
,')'
,','
וגם'.'
. -
base
: מציין את ההתנהגות (התו שצריך להקליד) כשאין רכיבי שינוי הם לחוצים. -
<modifier> או <modifier1>
+
<modifier2>+
...: מציין את ההתנהגות (התו שיש להקליד) כאשר לוחצים על המקש, וכל שצוינו פעילים.לדוגמה, מאפיין הצירוף
shift
מציין התנהגות שחלה כאשר בוצעה לחיצה על מקש הצירוף LEFT SHIFT או RIGHT SHIFT.באופן דומה, מאפיין הצירוף
rshift+ralt
מציין התנהגות כאשר לוחצים יחד על מקשי הצירוף RIGHT SHIFT ו-RIGHT ALT.
המשנים הבאים מזוהים במאפייני הצירוף:
shift
: חלה כשמקישים על מקש הצירוף LEFT SHIFT או RIGHT SHIFT.lshift
: חלה כשמקישים על מקש הצירוף LEFT SHIFT.rshift
: חלה כשמקישים על מקש הצירוף RIGHT SHIFT.alt
: חלה כשמקישים על מקש הצירוף ALT או LEFT ALT.lalt
: חלה כשמקישים על מקש הצירוף ALT שמאלה.ralt
: חלה כשמקישים על מקש הצירוף Alt 'ימינה'.ctrl
: רלוונטי לאחר לחיצה על מקש הצירוף LEFT Control או RIGHT control.lctrl
: חלה כשלוחצים על מקש הצירוף LEFT control.rctrl
: חלה כשלוחצים על מקש הצירוף 'לחצן ימין'.meta
: חלה כשמקישים על מקש הצירוף LEFT Meta או על מקש RIGHT.lmeta
: חלה כשמקישים על מקש הצירוף LEFT (מטא-נתונים).rmeta
: חלה כשמקישים על מקש הצירוף 'ימינה'.sym
: חלה כשמקישים על מקש הצירוף SYMBOL.fn
: חלה כשמקישים על הצירוף FUNCTION.capslock
: חלה כשמקש הצירוף CAPS LOCK נעול.numlock
: חלה כשמקש הצירוף NUM LOCK נעול.scrolllock
: חלה כשמקש הצירוף SCROLL LOCK נעול.
הסדר שבו הנכסים מוצגים הוא משמעותי. כשממפים מפתח אל התנהגותית, המערכת סורקת את כל המאפיינים הרלוונטיים לפי הסדר ומחזירה את ההתנהגות הרלוונטית שמצאה.
לכן, מאפיינים שמצוינים מאוחר יותר מבטלים מאפיינים ש שצוין מוקדם יותר למפתח נתון.
Behaviors
כל מאפיין ממופה להתנהגות. ההתנהגות הנפוצה ביותר היא להקליד תו אבל יש משתמשים אחרים.
המערכת מזהה את ההתנהגויות הבאות:
-
none
: לא להקליד תו.זו ברירת המחדל כשלא מצוין תו. ציון:
none
הוא אופציונלי, אבל הוא משפר את הבהירות. -
'X'
: צריך להקליד את ליטרל התווים שצוין.ההתנהגות הזו גורמת להזנה של התו שצוין תצוגת טקסט. ליטרל התווים יכול להיות כל תו ASCII, או רצפי הבריחה הבאים:
'\\'
: הקלדת תו לוכסן הפוך.'\n'
: מקלידים תו חדש בשורה (יש להשתמש בו לצורך ENTER / Return).'\t'
: יש להקליד תו TAB.'\''
: מקלידים את תו גרש.'\"'
: צריך להקליד תו מירכאות.'\uXXXX'
: מקלידים את תו ה-Unicode שנקודת הקוד שלו ניתנת בהקסדצימלי לפי XXXX.
-
fallback
<שם קוד מפתח של Android>: ביצוע פעולת ברירת מחדל אם המפתח אינו מטופלת על ידי האפליקציה.התנהגות זו גורמת למערכת לדמות לחיצה שונה על מקש כאשר אפליקציה לא מטפל במקור במפתח שצוין. היא משמשת לתמיכה בהתנהגות ברירת המחדל למפתחות חדשים שלא כל האפליקציות יודעים איך לטפל בהם, כמו ESCAPE או מקשים מספריים במקלדת (כשלא לוחצים על מקש המספר).
כשמתבצעת התנהגות חלופית, האפליקציה מקבלת שתי לחיצות על מקשים: מפתח אחד למפתח המקורי ושני למפתח החלופי שנבחר. אם האפליקציה מטפלת במפתח המקורי במהלך הפעלת המקש, אז המקש החלופי האירוע יבוטל (האירוע
KeyEvent.isCanceled
יחזירtrue
).
המערכת שומרת שני תווי Unicode כדי לבצע פונקציות מיוחדות:
-
'\uef00'
: כאשר מתבצעת התנהגות זו, תצוגת הטקסט משתמשת ב-API ומסירה את ארבעה תווים שמופיעים לפני הסמן, מפרש אותם כספרות הקסדצימליות ומוסיפה את בנקודת הקוד התואמת של Unicode. -
'\uef01'
: כאשר מתבצעת התנהגות זו, תצוגת הטקסט מציגה תיבת דו-שיח לבחירת תווים שמכילה סמלים שונים.
המערכת מזהה את תווי ה-Unicode הבאים כשילוב של ניקוד דיאקריטי תווים עיקריים:
'\u0300'
: הטעמה משנית.'\u0301'
: הטעמה הטעמה.'\u0302'
: הטעמת גג.'\u0303'
: הטעמת טילדה.'\u0308'
: הטעמה מלאה.
כשמקלידים מפתח מת ואחריו תו אחר, המקש המת מורכבות. לדוגמה, כשהמשתמש מקליד סימן הטעמה מסוג הטעמה מסוג הטעמה משנית מקש ואחריו האות 'a', התוצאה היא 'à'.
יש לעבור אל KeyCharacterMap.getDeadChar
לקבלת מידע נוסף על טיפול במפתח מת.
תגובות
שורות התגובה מתחילות בתו '#' וממשיכים עד לסוף השורה. תוכל לעשות זאת כך:
# A comment!
המערכת מתעלמת משורות ריקות.
איך שילובי המקשים ממופים להתנהגויות
כשהמשתמש לוחץ על מקש, המערכת מחפשת את ההתנהגות שמשויכת אל את השילוב של הקשה על המקש הזה עם מקשי הצירוף הנוכחיים.
SHIFT + A
נניח שהמשתמש לחץ על המקש A ו-SHIFT. המערכת מאתרת קודם
קבוצת המאפיינים וההתנהגויות שמשויכים ל-KEYCODE_A
.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
המערכת סורקת את המאפיינים מהראשון לשמאל ומסדרת משמאל לימין, תוך התעלמות
את המאפיינים label
ו-number
שהם מיוחדים.
הנכס הראשון שאותר הוא base
. המאפיין base
חל תמיד על
מקש, ללא קשר למקשים שעליהם לוחצים. הוא למעשה מציין את ברירת המחדל
של המפתח, אלא אם המאפיינים הבאים מבטלים אותו.
המערכת מוסיפה הערות כי המאפיין base
חל על ההקשה הזו על המקש הזה
לעובדה שההתנהגות היא 'a'
(יש להקליד את התו a
).
לאחר מכן המערכת ממשיכה לסרוק את המאפיינים הבאים למקרה שאחד מהם
הן ספציפיות יותר מ-base
והן מבטלות אותו. הוא נתקל ב-shift
חל גם על המקש, מקישים על SHIFT + A. המערכת מחליטה להתעלם
התנהגות המאפיין base
ובחירת ההתנהגות שמשויכת
המאפיין shift
, שהוא 'A'
(מקלידים את התו A
).
לאחר מכן המערכת תמשיך לסרוק את הטבלה, אבל אין מאפיינים אחרים שרלוונטיים לה הקשה על מקש (CAPS LOCK לא נעול, לא נלחץ על מקש Control, וגם לא בוצעה הקשה על מקש ALT, ולא על מקש Meta.
לכן ההתנהגות שתתקבל עבור שילוב המקשים SHIFT + A היא 'A'
.
Control + A
עכשיו חשוב להבין מה היה קורה אם המשתמש לוחץ ביחד על A ועל Command.
כמו קודם, המערכת תסרוק את טבלת המאפיינים. הוא יראה
שהמאפיין base
החיל, אבל גם ימשיך לסרוק עד
בסופו של דבר הוא הגיע לנכס control
. בזמן הזה, control
המאפיין מופיע אחרי base
, כך שההתנהגות שלו מבטלת את ההתנהגות של base
.
לכן, ההתנהגות שתתקבל משילוב המקשים Control + A היא none
.
ESCAPE
עכשיו נניח שהמשתמש לחץ על ESCAPE.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
הפעם המערכת מקבלת את ההתנהגות fallback BACK
, שהיא התנהגות חלופית.
מכיוון שלא מופיע ייצוג מילולי של תווים, לא תתבצע הקלדה של תו.
בזמן עיבוד המפתח, המערכת תספק תחילה KEYCODE_ESCAPE
אל
תרגום מכונה. אם האפליקציה לא מטפלת בזה, המערכת תנסה
שוב, אבל הפעם היא תספק לאפליקציה KEYCODE_BACK
שנדרשת על ידי ההתנהגות החלופית.
לכן, אפליקציות שמזהה את KEYCODE_ESCAPE
ותומכות בהן כוללות את
הזדמנות לטפל בה כמו שהיא, אבל אם לא,
מבצעים את פעולת החלופה: מתייחסים למפתח כאילו הוא KEYCODE_BACK
.
NUMPAD_0 עם או בלי NUM LOCK
למקשים המספריים במקלדת יש פירושים שונים מאוד, בהתאם מקש NUM LOCK נעול.
הצהרת המפתח הבאה מבטיחה ש-KEYCODE_NUMPAD_0
יכלול סוגים 0
כשלוחצים על NUM LOCK. כשלא לוחצים על NUM LOCK, המפתח נשלח
ליישום כרגיל, ואם הוא לא מטופל, החלופה
המפתח KEYCODE_INSERT
מועבר במקום זאת.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
כמו שאפשר לראות, הצהרות על מפתחות חלופיים משפרות משמעותית את התאימות באמצעות אפליקציות ישנות יותר שלא מזהות את כל המפתחות או תומכות באופן ישיר בכל המפתחות שנמצאים במקלדת בסגנון PC מלא.
דוגמאות
מקלדת מלאה
# This is an example of part of a key character map file for a full keyboard # include a few fallback behaviors for special keys that few applications # handle themselves. type FULL key C { label: 'C' base: 'c' shift, capslock: 'C' alt: '\u00e7' shift+alt: '\u00c7' ctrl, meta: none } key SPACE { label: ' ' base: ' ' ctrl: none alt, meta: fallback SEARCH } key NUMPAD_9 { label, number: '9' base: fallback PAGE_UP numlock: '9' ctrl, alt, meta: none }
מקלדת אלפאנומרית
# This is an example of part of a key character map file for an alphanumeric # thumb keyboard. Some keys are combined, such as `A` and `2`. Here we # specify `number` labels to tell the system what to do when the user is # typing a number into a dial pad. # # Also note the special character '\uef01' mapped to ALT+SPACE. # Pressing this combination of keys invokes an on-screen character picker. type ALPHA key A { label: 'A' number: '2' base: 'a' shift, capslock: 'A' alt: '#' shift+alt, capslock+alt: none } key SPACE { label: ' ' number: ' ' base: ' ' shift: ' ' alt: '\uef01' shift+alt: '\uef01' }
לוח משחקים
# This is an example of part of a key character map file for a game pad. # It defines fallback actions that enable the user to navigate the user interface # by pressing buttons. type SPECIAL_FUNCTION key BUTTON_A { base: fallback BACK } key BUTTON_X { base: fallback DPAD_CENTER } key BUTTON_START { base: fallback HOME } key BUTTON_SELECT { base: fallback MENU }
הערת תאימות
לפני Android Honeycomb 3.0, צוינה מפת תווים של מפתח Android
באמצעות תחביר שונה מאוד והועבר לפורמט קובץ בינארי.
(.kcm.bin
) בזמן ה-build.
למרות שהפורמט החדש משתמש באותו התוסף .kcm
, התחביר די
שונה (והרבה יותר חזקה).
החל מ-Android Honeycomb 3.0, צריך להשתמש בכל קובצי מפת התווים של מפתח Android
את התחביר החדש ואת פורמט הקובץ של טקסט פשוט שמתוארים במסמך הזה.
התחביר הישן לא נתמך וקובצי .kcm.bin
הישנים לא מזוהים
על ידי המערכת.
פתק בנושא שפה
נכון לעכשיו, מערכת Android לא תומכת במקלדות רב-לשוניות. יתרה על כך מפת תווים כללית מובנית מבוססת על פריסת מקלדת של אנגלית (ארה"ב).
אנחנו ממליצים ליצרני ציוד מקורי לספק מפות של דמויות מקשים בהתאמה אישית למקלדות שלהם אם הם מיועדים לשפות אחרות.
גרסאות עתידיות של Android עשויות לספק תמיכה טובה יותר במקלדות רב-לשוניות או פריסות מקלדת שניתן לבחור על-ידי המשתמש.
אימות
חשוב לאמת את קובצי מפת התווים העיקריים באמצעות אימות מפות המקשים.