ملفات خرائط الأحرف الرئيسية (ملفان (.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
: لوحة مفاتيح كاملة بنمط الكمبيوتر الشخصيتعمل لوحة المفاتيح الكاملة مثل لوحة مفاتيح الكمبيوتر الشخصي. يتم الوصول إلى جميع الرموز مباشرةً بالضغط على مفاتيح في لوحة المفاتيح بدون دعم الشاشة أو ميزات مثل كالكتابة بالأحرف الكبيرة تلقائيًا.
تم تصميم هذا النوع من لوحة المفاتيح بشكل عام للكتابة اليدوية الكاملة.
-
SPECIAL_FUNCTION
: لوحة مفاتيح تُستخدم فقط لأداء وظائف التحكم في النظام بدلاً من الكتابة.تتكون لوحة المفاتيح ذات الوظائف الخاصة فقط من مفاتيح غير قابلة للطباعة، مثل "الصفحة الرئيسية" و"الطاقة" اللذين لا يتم استخدامهما فعليًا للكتابة.
إنّ خريطتَي الأحرف الرئيسية Generic.kcm
وVirtual.kcm
هما لوحتا مفاتيح FULL
.
نماذج البيانات الرئيسية
تتألف كل تعريفات رئيسية من الكلمة الرئيسية key
متبوعة برمز مفتاح Android.
وقوس مزهّر مفتوح ومجموعة من الخصائص والسلوكيات وقوس مجعد قريب.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
الخصائص
ينشئ كل خاصية رئيسية تعيينًا من مفتاح إلى سلوك. لإجراء تضييق نطاق ملفات خريطة الأحرف الرئيسية، ويمكن تعيين عدة خصائص نفس السلوك عن طريق فصلها بفاصلة.
في المثال أعلاه، تم تحديد السلوك 'A'
للسمة label
.
وبالمثل، يتم تعيين السمات 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
: يسري هذا الإجراء عند الضغط على مفتاحَي التعديل LEFT ALT أو RIGHT ALT.lalt
: يسري هذا الإجراء عند الضغط على مفتاح التعديل LEFT ALT.ralt
: يسري هذا الإجراء عند الضغط على مفتاح التعديل RIGHT ALT.ctrl
: يسري هذا الإجراء عند الضغط على مفتاح التعديل LEFT Control أو مفتاح التعديل RIGHT control.lctrl
: تسري هذه السياسة عند الضغط على مفتاح التعديل LEFT Control.rctrl
: يسري هذا الإجراء عند الضغط على مفتاح التعديل RIGHT Control.meta
: يسري هذا الإجراء عند الضغط على مفتاح التعديل Meta الأيسر أو الأيمن.lmeta
: تسري هذه السياسة عند الضغط على مفتاح التعديل LEFT meta.rmeta
: تسري هذه السياسة عند الضغط على مفتاح التعديل meta الأيمن.sym
: تسري هذه السياسة عند الضغط على مفتاح التعديل SYMBOL.fn
: تسري هذه السياسة عند الضغط على مفتاح التعديل FUNCTION.capslock
: تسري هذه السياسة عند قفل مفتاح التعديل CAPS LOCK.numlock
: تسري هذه السياسة عند قفل مفتاح التعديل NUM LOCK.scrolllock
: يسري هذا الإجراء عند قفل مفتاح التعديل SCROLL LOCK.
يمثل الترتيب الذي يتم سرد المواقع به أهمية كبيرة. عند تعيين مفتاح سلوك معين، يفحص النظام جميع الخصائص ذات الصلة بالترتيب ويعرض آخر السلوك الساري الذي وجده.
وبالتالي، تلغي الخصائص التي يتم تحديدها لاحقًا الخصائص التي المحددة مسبقًا لمفتاح معين.
السلوكيات
يرتبط كل موقع بسلوك ما. يُعد السلوك الأكثر شيوعًا هو كتابة حرف لكن البعض الآخر.
يتم التعرّف على السلوكيات التالية:
-
none
: لا تكتب حرفًا.ويكون هذا السلوك هو الإعداد التلقائي في حال عدم تحديد أي حرف. جارٍ تحديد
none
اختيارية لكنها تحسن الوضوح. -
'X'
: اكتب الحرف الحرفي المحدد.ويتسبب هذا السلوك في إدخال الحرف المحدد في العنصر محل التركيز طريقة عرض النص. ويمكن أن يكون الحرف الحرفي أي حرف ASCII أو أحد تسلسلات الهروب التالية:
'\\'
: اكتب شرطة مائلة للخلف.'\n'
: اكتب حرفًا جديدًا (استخدم هذا للإدخال / > الرجوع).'\t'
: اكتب حرف TAB.'\''
: اكتب فاصلة عليا.'\"'
: اكتب علامة الاقتباس.'\uXXXX'
: اكتب حرف Unicode الذي يتم تحديد نقطة رمزه بنظام سداسي عشري بواسطة XXXX.
-
fallback
<اسم رمز مفتاح Android>: يمكن تنفيذ إجراء تلقائي إذا لم يكن المفتاح من خلال التطبيق.ويؤدي هذا السلوك إلى محاكاة النظام لضغط مختلف على مفتاح عند تشغيل أحد التطبيقات لا يعالج المفتاح المحدد في الأصل. يتم استخدامه لإتاحة السلوك التلقائي للمفاتيح الجديدة التي لا تعرف جميع التطبيقات كيفية التعامل معها، مثل ESCAPE أو مفاتيح لوحة المفاتيح الرقمية (عند عدم الضغط على مفتاح numlock).
عند تنفيذ إجراء احتياطي، سيتلقى التطبيق ضغطتين على المفتاح: واحد للمفتاح الأصلي والآخر للمفتاح الاحتياطي الذي تم تحديده. إذا كان التطبيق يتعامل مع المفتاح الأصلي أثناء تنفيذ المفتاح، فإن المفتاح الاحتياطي سيتم إلغاء الحدث (سيؤدي
KeyEvent.isCanceled
إلى عرضtrue
).
يحتفظ النظام برمزَي Unicode لأداء دوال خاصة:
-
'\uef00'
: عند تنفيذ هذا السلوك، تستهلك طريقة عرض النص السمة وتزيلها أربعة أحرف تسبق المؤشر، وتفسرها كأرقام سداسية عشرية، ثم تُدرج نقطة رمز 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'
.
التحكّم + A
الآن فكر في ما يمكن أن يحدث إذا ضغط المستخدم على A وCtrl معًا.
وكما في السابق، كان النظام يفحص جدول السمات. سيلاحظ
التي تطبّقها السمة base
ولكنّها ستستمر أيضًا في الفحص إلى
ووصل في النهاية إلى السمة control
. عند حدوث ذلك، control
تظهر بعد base
، وبالتالي يؤدي سلوكها إلى إلغاء سلوك base
.
وبالتالي يكون السلوك الناتج لمجموعة المفاتيح Ctrl + A هو none
.
ESC
لنفترض الآن أن المستخدم ضغط على 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 }
كما نرى، تُحسن تعريفات المفاتيح الاحتياطية من التوافق بشكل كبير مع التطبيقات القديمة التي لا تتعرف على جميع المفاتيح أو تدعمها بشكل مباشر الموجودة على لوحة مفاتيح بنمط كمبيوتر شخصي كامل.
أمثلة
لوحة المفاتيح الكاملة
# 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
) في وقت الإصدار.
وعلى الرغم من أن التنسيق الجديد يستخدم الامتداد .kcm
نفسه، إلا أن بنية الصيغة
مختلفة (وأقوى بكثير).
اعتبارًا من Android Honeycomb 3.0، يجب أن تستخدم كل ملفات خرائط الشخصيات الرئيسية في Android
بناء الجملة الجديد وتنسيق ملف النص العادي الموضح في هذا المستند.
البنية القديمة غير متوافقة ولم يتم التعرّف على ملفات .kcm.bin
القديمة.
النظام.
ملاحظة لغوية
لا يتيح نظام التشغيل Android حاليًا استخدام لوحات المفاتيح المتعددة اللغات. علاوة على ذلك، تفترض خريطة الأحرف الرئيسية العامة المضمنة تخطيط لوحة المفاتيح الإنجليزية (الولايات المتحدة).
ننصح المصنّعين الأصليين للأجهزة بتوفير خرائط أحرف رئيسية مخصَّصة للوحات المفاتيح. إذا كانت مصمّمة للغات أخرى
قد توفِّر الإصدارات المستقبلية من Android توافقًا أفضل مع لوحات المفاتيح المتعددة اللغات. أو تخطيطات لوحة مفاتيح يمكن للمستخدم اختيارها.
التحقُّق
تأكد من التحقق من صحة ملفات خريطة الأحرف الرئيسية باستخدام التحقق من خرائط المفاتيح.