קבצי מפת תווים מפתח

קובצי מפת תווי מפתח (קבצי .kcm ) אחראים למיפוי שילובים של קודי מפתחות אנדרואיד עם מתקנים לתווי 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 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 מורכבות ממפתח מילת המפתח ואחריו שם קוד מפתח אנדרואיד, סד מתולתל פתוח, קבוצה של מאפיינים והתנהגויות וסוגר מתולתל קרוב.

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.

    באופן דומה, מאפיין ה-modifier rshift+ralt מציין התנהגות שחלה כאשר המשנים RIGHT SHIFT וגם RIGHT ALT נלחצים יחד.

המשתנים הבאים מזוהים במאפייני השינוי:

  • shift : חל כאשר לוחצים על הלחצן שמאלה SHIFT או SHIFT ימינה.
  • lshift : חל כאשר לוחצים על הלחצן שמשנה SHIFT.
  • rshift : חל כאשר לוחצים על הלחצן שמשנה SHIFT ימינה.
  • alt : חל כאשר לוחצים על הלחצן ALT שמאל או ALT ימני.
  • lalt : חל כאשר לוחצים על הלחצן ALT שמאלי.
  • ralt : חל כאשר לוחצים על השינוי ALT ימני.
  • ctrl : חל כאשר לוחצים על הלחצן שמאלי CONTROL או RIGHT CONTROL.
  • lctrl : חל כאשר לוחצים על הלחצן השמאלי של השליטה.
  • rctrl : חל כאשר לוחצים על הלחצן RIGHT CONTROL.
  • meta : חל כאשר לוחצים על ה-LEFT META או RIGHT META.
  • lmeta : חל כאשר לוחצים על ה-LEFT META משנה.
  • rmeta : חל כאשר לוחצים על ה-REIGHT META משנה.
  • sym : חל כאשר לוחצים על הסמל SYMBOL.
  • fn : חל כאשר לוחצים על ה-FUNCTION.
  • capslock : חל כאשר משנה CAPS LOCK נעול.
  • numlock : חל כאשר השינוי NUM LOCK נעול.
  • scrolllock : חל כאשר השינוי SCROLL LOCK נעול.

סדר רישום הנכסים הוא משמעותי. בעת מיפוי מפתח להתנהגות, המערכת סורקת את כל המאפיינים הרלוונטיים לפי הסדר ומחזירה את ההתנהגות הישימה האחרונה שהיא מצאה.

כתוצאה מכך, מאפיינים שצוינו מאוחר יותר עוקפים מאפיינים שצוינו קודם לכן עבור מפתח נתון.

התנהגויות

כל מאפיין ממפה להתנהגות. ההתנהגות הנפוצה ביותר היא הקלדת דמות אבל יש אחרות.

התנהגויות הבאות מוכרות:

  • none : אל תקליד תו.

    אופן פעולה זה הוא ברירת המחדל כאשר לא צוין תו. ציון none הוא אופציונלי אבל זה משפר את הבהירות.

  • 'X' : הקלד את התו שצוין מילולי.

    אופן פעולה זה גורם להזנת התו שצוין בתצוגת הטקסט הממוקדת. התו המילולי יכול להיות כל תו ASCII, או אחד מרצפי הבריחה הבאים:

    • '\\' : הקלד תו נטוי אחורי.
    • '\n' : הקלד תו שורה חדש (השתמש בזה עבור ENTER / RETURN).
    • '\t' : הקלד תו TAB.
    • '\'' : הקלד תו אפוסתרוף.
    • '\"' : הקלד תו מרכאה.
    • '\uXXXX' : הקלד את תו Unicode שנקודת הקוד שלו ניתנת בהקסיד על ידי XXXX.
  • fallback <שם קוד מפתח אנדרואיד>: בצע פעולת ברירת מחדל אם המפתח אינו מטופל על ידי האפליקציה.

    אופן פעולה זה גורם למערכת לדמות לחיצת מקש שונה כאשר יישום אינו מטפל במפתח שצוין באופן מקורי. הוא משמש לתמיכה בהתנהגות ברירת מחדל עבור מקשים חדשים שלא כל היישומים יודעים כיצד לטפל בהם, כגון ESCAPE או מקשי לוח מקשים מספריים (כאשר numlock לא נלחץ).

    כאשר מתבצעת התנהגות חילופין, האפליקציה תקבל שתי לחיצות מקש: אחת עבור המקש המקורי ואחרת עבור מקש החזרה שנבחר. אם האפליקציה מטפלת במפתח המקורי במהלך פתיחת המפתח, אזי אירוע מפתח החזרה יבוטל ( KeyEvent.isCanceled יחזור true ).

המערכת שומרת שני תווי Unicode לביצוע פונקציות מיוחדות:

  • '\uef00' : כאשר התנהגות זו מבוצעת, תצוגת הטקסט צורכת ומסירה את ארבעת התווים הקודמים לסמן, מפרשת אותם כספרות hex, ומכניסה את נקודת הקוד המתאימה של Unicode.

  • '\uef01' : כאשר התנהגות זו מבוצעת, תצוגת הטקסט מציגה תיבת דו-שיח של בוחר תווים המכילה סמלים שונים.

המערכת מזהה את תווי Unicode הבאים כמשלבים תווי מפתח מתים דיקריטיים:

  • '\u0300' : מבטא חמור.
  • '\u0301' : מבטא חריף.
  • '\u0302' : מבטא Circumflex.
  • '\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 ו-CONTROL ביחד.

כמו קודם, המערכת תסרוק את טבלת המאפיינים. הוא ישים לב שמאפיין base חל אך גם ימשיך לסרוק עד שיגיע בסופו של דבר למאפיין control . כפי שזה קורה, מאפיין control מופיע אחרי base כך שההתנהגות שלו עוקפת את התנהגות base .

אז ההתנהגות המתקבלת עבור צירוף המקשים CONTROL + A היא none .

בריחה

כעת נניח שהמשתמש לחץ על ESCAPE.

key ESCAPE {
    base:                               fallback BACK
    alt, meta:                          fallback HOME
    ctrl:                               fallback MENU
}

הפעם המערכת משיגה את ההתנהגות fallback BACK , התנהגות fallback. מכיוון שלא מופיע תו מילולי, שום תו לא יוקלד.

בעת עיבוד המפתח, המערכת תעביר תחילה 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, מפת תווי המפתח של אנדרואיד צוינה באמצעות תחביר שונה מאוד והורכבה לפורמט קובץ בינארי ( .kcm.bin ) בזמן הבנייה.

למרות שהפורמט החדש משתמש באותה סיומת .kcm , התחביר שונה למדי (והרבה יותר חזק).

החל מ-Android Honeycomb 3.0, כל קובצי מפת תו המפתח של Android חייבים להשתמש בתחביר החדש ובפורמט קובץ הטקסט הפשוט המתואר במסמך זה. התחביר הישן אינו נתמך וקבצי .kcm.bin הישנים אינם מזוהים על ידי המערכת.

הערת שפה

אנדרואיד לא תומך כרגע במקלדות רב לשוניות. יתרה מכך, מפת התווים המפתח הגנרית המובנית מניחה פריסת מקלדת באנגלית בארה"ב.

יצרני OEM מעודדים לספק מפות תווי מפתח מותאמות אישית למקלדות שלהם אם הן מיועדות לשפות אחרות.

גרסאות עתידיות של אנדרואיד עשויות לספק תמיכה טובה יותר עבור מקלדות רב לשוניות או פריסות מקלדת לבחירת המשתמש.

מַתַן תוֹקֵף

הקפד לאמת את קובצי מפת תווי המפתח שלך באמצעות הכלי Validate Keymaps .