Anahtar karakter eşleme dosyaları (.kcm
dosyaları), Android anahtar kodlarının değiştiricilerle kombinasyonlarının Unicode karakterleriyle eşlenmesinden sorumludur.
Anahtar bulunan tüm dahili (yerleşik) giriş cihazları için cihaza özel anahtar düzeni dosyaları zorunludur. Bu dosyalar, yalnızca sisteme cihazın tam bir klavye değil, özel amaçlı olduğunu bildirmek için gereklidir.
Cihaza özgü anahtar düzeni dosyaları, harici klavyeler için isteğe bağlıdır ve genellikle hiç gerekmez. Sistem, birçok harici klavye için uygun olan genel bir anahtar karakter haritası sağlar.
Cihaza özgü bir anahtar düzeni dosyası yoksa sistem bunun yerine varsayılan bir düzen seçer.
Konum
Anahtar karakter eşleme dosyaları, USB tedarikçisine, ürüne (ve isteğe bağlı olarak sürüme) veya giriş cihazı adına göre bulunur.
Aşağıdaki yollar sırayla kontrol edilir.
/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
Cihaz adını içeren bir dosya yolu oluşturulurken cihaz adındaki "0"-"9", "a"-"z", "A"-"Z", "-" veya "_" dışındaki tüm karakterler "_" ile değiştirilir.
Genel anahtar karakter eşleme dosyası
Sistem, Generic.kcm
adlı özel bir yerleşik anahtar karakter eşleme dosyası sağlar.
Bu tuş karakter haritası, çeşitli standart harici klavyeleri desteklemek için tasarlanmıştır.
Genel anahtar karakter haritasını değiştirmeyin.
Sanal tuş karakter haritası dosyası
Sistem, sanal klavye cihazları tarafından kullanılan Virtual.kcm
adlı özel bir yerleşik tuş karakter haritası dosyası sağlar.
Sanal klavye cihazı, kimliği -1 olan sentetik bir giriş cihazıdır (KeyCharacterMap.VIRTUAL_KEYBOARD
bölümüne bakın). Android Honeycomb 3.0'dan itibaren tüm Android cihazlarda bulunur. Sanal klavye cihazının amacı, dahili klavyesi olmayan cihazlar için bile IME veya test enstrümentasyonu tarafından uygulamalara tuş vuruşları eklemek için kullanılabilecek bilinen bir yerleşik giriş cihazı sağlamaktır.
Sanal klavyenin tüm cihazlarda aynı olan tam bir QWERTY düzenine sahip olduğu varsayılır. Bu sayede uygulamalar, sanal klavye cihazını kullanarak tuş vuruşları ekleyebilir ve her zaman aynı sonuçları elde edebilir.
Sanal tuş karakter haritasını değiştirmeyin.
Sözdizimi
Anahtar karakter haritası dosyası, bir klavye türü beyanı ve bir dizi anahtar beyanından oluşan düz metin dosyasıdır.
Klavye türü beyanı
Klavye türü beyanı, klavyenin genel davranışını tanımlar. Karakter haritası dosyası bir klavye türü beyanı içermelidir. Netlik için genellikle dosyanın üst kısmına yerleştirilir.
type FULL
Aşağıdaki klavye türleri tanınır:
-
NUMERIC
: Sayısal (12 tuşlu) klavye.Sayısal klavye, çoklu dokunma yaklaşımını kullanarak metin girişini destekler. İstediğiniz harfi veya simgeyi oluşturmak için bir tuşa birden çok kez dokunmanız gerekebilir.
Bu tür klavyeler genellikle baş parmak ile yazmak için tasarlanmıştır.
KeyCharacterMap.NUMERIC
değerine karşılık gelir. -
PREDICTIVE
: Tüm harfleri içeren ancak tuşlarda birden fazla harf bulunan bir klavye.Bu tür klavyeler genellikle baş parmak ile yazmak için tasarlanmıştır.
KeyCharacterMap.PREDICTIVE
değerine karşılık gelir. -
ALPHA
: Tüm harflerin ve bazı sayıların bulunduğu bir klavye.Alfabetik klavyeler doğrudan metin girişini destekler ancak küçük form faktörüne sahip sıkıştırılmış bir düzene sahip olabilir.
FULL
klavyesine kıyasla bazı sembollere yalnızca özel ekran karakter seçicileri kullanılarak erişilebilir. Ayrıca çerçeve, yazma hızını ve doğruluğunu artırmak için alfabetik klavyeler için otomatik büyük harf kullanımı ve anahtar açma/kapatma düğmeli/kilitli SHIFT ve ALT tuşları gibi özel kolaylıklar sunar.Bu tür klavyeler genellikle baş parmak ile yazmak için tasarlanmıştır.
-
FULL
: Tam PC tarzı klavye.Tam klavye, PC klavyesi gibi çalışır. Tüm sembollere, ekran desteği veya otomatik büyük harf kullanımı gibi kolaylıklar olmadan doğrudan klavye tuşlarına basılarak erişilir.
Bu tür klavyeler genellikle iki elin de kullanılması için tasarlanmıştır.
-
SPECIAL_FUNCTION
: Yalnızca yazmak için değil, sistem kontrol işlevlerini gerçekleştirmek için kullanılan bir klavye.Özel işlev klavyesi, yalnızca HOME ve POWER gibi yazım için kullanılmayan, yazdırmayan tuşlardan oluşur.
Generic.kcm
ve Virtual.kcm
tuş karakter haritaları FULL
klavyelerdir.
Anahtar beyanları
Anahtar beyanlarının her biri key
anahtar kelimesinden, ardından bir Android anahtar kodu adından, açık parantezden, bir dizi özellik ve davranıştan ve kapalı parantezden oluşur.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Özellikler
Her anahtar özelliği, bir anahtar ile davranış arasında bir eşleme oluşturur. Anahtar karakter eşleme dosyalarını daha kompakt hale getirmek için birden fazla mülkü virgülle ayırarak aynı davranışla eşleyebilirsiniz.
Yukarıdaki örnekte, label
mülküne 'A'
davranışı atanmıştır.
Benzer şekilde, ctrl
, alt
ve meta
mülklerinin tümü aynı anda none
davranışına atanır.
Aşağıdaki özellikler tanınır:
-
label
: Tek karakterden oluştuğunda anahtara fiziksel olarak basılan etiketi belirtir. Bu,KeyCharacterMap.getDisplayLabel
yöntemi tarafından döndürülen değerdir. -
number
: Bir sayısal metin görünümüne (ör. kullanıcı telefon numarası yazarken) odaklanıldığında davranışı (yazılması gereken karakter) belirtir.Kompakt klavyelerde genellikle birden fazla simge tek bir tuşa yerleştirilir. Örneğin, aynı tuşla
'1'
ve'a'
veya'#'
ve'q'
yazılabilir. Bu anahtarlar içinnumber
özelliği, varsa sayısal bağlamda hangi sembolün yazılması gerektiğini belirtecek şekilde ayarlanmalıdır.Bazı tipik "sayısal" simgeler
'0'
ile'9'
arasındaki rakamlar,'#'
,'+'
,'('
,')'
,','
ve'.'
'tır. -
base
: Değiştirici tuşlara basılmadığında davranışı (yazılması gereken karakteri) belirtir. -
<modifier> veya <modifier1>
+
<modifier2>+
...: Anahtara basıldığında ve belirtilen tüm değiştiriciler etkinken davranışı (yazılması gereken karakter) belirtir.Örneğin, değiştirici mülkü
shift
, SOL SHIFT veya SAĞ SHIFT değiştiricisine basıldığında geçerli olan bir davranışı belirtir.Benzer şekilde,
rshift+ralt
değiştirici özelliği, hem SAĞ SHIFT hem de SAĞ ALT değiştiricileri birlikte basıldığında geçerli olan bir davranışı belirtir.
Değiştirici özelliklerinde aşağıdaki değiştiriciler tanınır:
shift
: SOL ÜST KARAKTER veya SAĞ ÜST KARAKTER değiştiricisine basıldığında geçerli olur.lshift
: SOL ÜST KARAKTER değiştiricisine basıldığında geçerli olur.rshift
: SAĞ ÜST KARAKTER değiştiricisine basıldığında geçerli olur.alt
: SOL ALT veya SAĞ ALT değiştirici tuşuna basıldığında geçerli olur.lalt
: SOL ALT değiştiriciye basıldığında geçerli olur.ralt
: SAĞ ALT değiştiriciye basıldığında geçerlidir.ctrl
: SOL KONTROL veya SAĞ KONTROL değiştiricisine basıldığında geçerli olur.lctrl
: SOL KONTROL değiştiricisine basıldığında geçerli olur.rctrl
: SAĞ KONTROL değiştiricisine basıldığında geçerli olur.meta
: SOL META veya SAĞ META değiştiriciye basıldığında geçerli olur.lmeta
: SOL META değiştiriciye basıldığında uygulanır.rmeta
: SAĞ META değiştiriciye basıldığında geçerli olur.sym
: SYMBOL değiştiricisine basıldığında geçerli olur.fn
: FUNCTION değiştiricisine basıldığında geçerli olur.capslock
: CAPS LOCK değiştiricisi kilitliyken geçerlidir.numlock
: NUM LOCK değiştirici kilitliyken geçerlidir.scrolllock
: SCROLL LOCK değiştirici kilitliyken geçerlidir.
Tesislerin listelenme sırası önemlidir. Bir anahtarı bir davranışla eşlerken sistem, sırayla tüm ilgili mülkleri tarar ve bulduğu son geçerli davranışı döndürür.
Sonuç olarak, daha sonra belirtilen özellikler belirli bir anahtar için daha önce belirtilen özellikleri geçersiz kılar.
Davranışlar
Her özellik bir davranışla eşlenir. En yaygın davranış, karakter yazmak olsa da başka davranışlar da vardır.
Aşağıdaki davranışlar tanınır:
-
none
: Karakter yazmayın.Hiçbir karakter belirtilmediğinde varsayılan olarak bu davranış kullanılır.
none
değerini belirtmek isteğe bağlıdır ancak netliği artırır. -
'X'
: Belirtilen karakter değişmezini yazın.Bu davranış, belirtilen karakterin odaklı metin görünümüne girmesine neden olur. Karakter değişmezi herhangi bir ASCII karakteri veya aşağıdaki kaçış dizilerinden biri olabilir:
'\\'
: Ters eğik çizgi karakteri yazın.'\n'
: Yeni bir satır karakteri yazın (ENTER / RETURN için bunu kullanın).'\t'
: Sekme karakteri yazın.'\''
: Kesme işareti karakteri yazın.'\"'
: Tırnak işareti yazın.'\uXXXX'
: Kod noktası XXXX şeklinde onaltılık olarak verilen Unicode karakterini yazın.
-
fallback
<Android anahtar kodu adı>: Anahtar uygulama tarafından yönetilmezse varsayılan bir işlem gerçekleştirin.Bu davranış, bir uygulama belirtilen anahtarı yerel olarak işlemediğinde sistemin farklı bir tuş basımını simüle etmesine neden olur. Tüm uygulamaların nasıl kullanılacağını bilmediği yeni tuşlar (ör. ESCAPE veya sayısal tuş takımı tuşları (numlock tuşuna basılmadığında)) için varsayılan davranışı desteklemek amacıyla kullanılır.
Yedek davranış uygulandığında uygulama iki tuş basışı alır: biri orijinal tuş, diğeri ise seçilen yedek tuş içindir. Uygulama, tuş yukarı sırasında orijinal anahtarı işlerse yedek anahtar etkinliği iptal edilir (
KeyEvent.isCanceled
,true
değerini döndürür).
Sistem, özel işlevleri gerçekleştirmek için iki Unicode karakterini ayırır:
-
'\uef00'
: Bu davranış gerçekleştirildiğinde metin görünümü, imlecin önündeki dört karakteri tüketip kaldırır, bunları on altılık basamaklar olarak yorumlar ve ilgili Unicode kod noktasını ekler. -
'\uef01'
: Bu davranış gerçekleştirildiğinde metin görünümünde çeşitli semboller içeren bir karakter seçici iletişim kutusu gösterilir.
Sistem, aşağıdaki Unicode karakterlerini birleştirici ayırıcı ölü tuş karakterleri olarak tanır:
'\u0300'
: Aksan işareti.'\u0301'
: Aksan işareti.'\u0302'
: İnceltme işareti.'\u0303'
: Yaklaşık işareti.'\u0308'
: Umlaut aksan işareti.
Bir ölü tuş ve ardından başka bir karakter yazıldığında ölü tuş ve sonraki karakterler oluşturulur. Örneğin, kullanıcı tırnak içine alınmış aksan tuşunu ve ardından "a" harfini yazdığında sonuç "à" olur.
Kullanılmayan anahtarların işlenmesi hakkında daha fazla bilgi için KeyCharacterMap.getDeadChar
sayfasına bakın.
Yorumlar
Yorum satırları "#" ile başlar ve satırın sonuna kadar devam eder. Örneğin:
# A comment!
Boş satırlar yoksayılır.
Tuş kombinasyonlarının davranışlarla eşlenmesi
Kullanıcı bir tuşa bastığında sistem, bu tuş basma işlemiyle birlikte basılı olan değiştirici tuşların kombinasyonuyla ilişkili davranışı arar.
Üst Karakter + A
Kullanıcının A ve SHIFT tuşlarına birlikte bastığını varsayalım. Sistem önce KEYCODE_A
ile ilişkili mülk ve davranış grubunu bulur.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Sistem, özel olan label
ve number
özelliklerini yok sayarak mülkleri baştan sona ve soldan sağa doğru tarar.
Karşılaşılan ilk mülk base
. base
mülkü, hangi değiştirici tuşlara basıldığına bakılmaksızın her zaman bir tuşa uygulanır. Aşağıdaki özellikler tarafından geçersiz kılınmadığı sürece anahtar için varsayılan davranışı belirtir.
base
özelliği bu tuş basışı için geçerli olduğundan sistem, davranışının 'a'
(a
karakterini yazma) olduğunu not eder.
Ardından sistem, bunlardan herhangi birinin base
'ten daha spesifik olması ve base
'yi geçersiz kılması ihtimaline karşı sonraki mülkleri taramaya devam eder. shift
ile karşılaşır. Bu, SHIFT + A tuşlarına basıldığında da geçerlidir. Bu nedenle sistem, base
mülkünün davranışını yok saymaya karar verir ve shift
mülküyle ilişkili davranışı seçer. Bu davranış 'A'
'dir (A
karakterini yazın).
Ardından tabloyu taramaya devam eder ancak bu tuş basışı için başka özellik uygulanmaz (CAPS LOCK kilitli değildir, CONTROL tuşuna, ALT tuşuna ve META tuşuna basılmaz).
Dolayısıyla, SHIFT + A tuş kombinasyonu için ortaya çıkan davranış 'A'
olur.
KONTROL + A
Şimdi kullanıcı A ve KONTROL tuşlarına birlikte basarsa ne olacağını düşünün.
Sistem, daha önce olduğu gibi mülk tablosunu tarar. base
mülkünün uygulandığını fark eder ancak control
mülküne ulaşana kadar taramaya devam eder. control
mülkü base
'dan sonra göründüğü için davranışı base
davranışını geçersiz kılar.
Dolayısıyla, CONTROL + A tuş kombinasyonu için ortaya çıkan davranış none
olur.
ESCAPE
Şimdi kullanıcının ESC tuşuna bastığını varsayalım.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
Bu kez sistem, yedek davranış olan fallback BACK
davranışını alır.
Karakter değeri görünmediği için karakter yazılmaz.
Sistem, anahtarı işlerken önce uygulamaya KEYCODE_ESCAPE
gönderir. Uygulama bunu işlemezse sistem tekrar dener ancak bu kez yedek davranışın istediği şekilde KEYCODE_BACK
'yi uygulamaya gönderir.
Bu nedenle, KEYCODE_ESCAPE
değerini tanıyıp destekleyen uygulamalar bu değeri olduğu gibi işleyebilir. Bu değeri tanımayan diğer uygulamalar ise anahtarı KEYCODE_BACK
gibi işleyen yedek işlemi gerçekleştirebilir.
NUM LOCK açık veya kapalıyken NUMPAD_0
Sayısal tuş takımı tuşlarının işlevi, NUM LOCK tuşunun kilitli olup olmadığına bağlı olarak çok farklıdır.
Aşağıdaki anahtar beyanı, NUM LOCK tuşuna basıldığında KEYCODE_NUMPAD_0
0
yazmasını sağlar. NUM LOCK tuşuna basılmazsa tuş, uygulamaya her zamanki gibi gönderilir ve işlenmezse bunun yerine yedek tuş KEYCODE_INSERT
gönderilir.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
Gördüğümüz gibi, yedek anahtar beyanları, tam PC tarzı bir klavyede bulunan tüm anahtarları tanımayan veya doğrudan desteklemeyen eski uygulamalarla uyumluluğu büyük ölçüde artırır.
Örnekler
Tam klavye
# 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 }
Alfanümerik klavye
# 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' }
Oyun kumandası
# 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 }
Uyumluluk notu
Android Honeycomb 3.0'dan önce Android anahtar karakter haritası çok farklı bir söz dizimi kullanılarak belirtiliyordu ve derleme sırasında ikili dosya biçiminde (.kcm.bin
) derleniyordu.
Yeni biçimte aynı .kcm
uzantısı kullanılsa da söz dizimi oldukça farklıdır (ve çok daha güçlüdür).
Android Honeycomb 3.0'dan itibaren tüm Android anahtar karakter haritası dosyaları, bu belgede açıklanan yeni söz dizimi ve düz metin dosya biçimini kullanmalıdır.
Eski söz dizimi desteklenmez ve eski .kcm.bin
dosyaları sistem tarafından tanınmaz.
Dil notu
Android şu anda çok dilli klavyeleri desteklememektedir. Ayrıca, yerleşik genel tuş karakter haritası ABD İngilizcesi klavye düzenini varsayar.
OEM'lerin, diğer diller için tasarlanmış klavyelerinde özel tuş karakter haritaları sağlaması önerilir.
Android'in gelecekteki sürümlerinde çok dilli klavyeler veya kullanıcı tarafından seçilebilen klavye düzenleri için daha iyi destek sağlanabilir.
Doğrulama
Anahtar Eşlemelerini Doğrula aracını kullanarak anahtar karakter eşleme dosyalarınızı doğruladığınızdan emin olun.