Anahtar karakter eşleme dosyaları ( .kcm
dosyaları), Android anahtar kodlarının değiştiricilerle kombinasyonlarının Unicode karakterlerle eşleştirilmesinden sorumludur.
Cihaza özel tuş düzeni dosyaları, sisteme cihazın yalnızca özel amaçlı olduğunu (tam bir klavye olmadığını) bildirmek için, tuşları olan tüm dahili (yerleşik) giriş cihazları için gereklidir .
Cihaza özel tuş düzeni dosyaları harici klavyeler için isteğe bağlıdır ve çoğu zaman hiç gerekli değildir. Sistem, birçok harici klavyeye uygun genel bir tuş karakter haritası sağlar.
Cihaza özel bir tuş düzeni dosyası yoksa sistem bunun yerine varsayılanı seçecektir.
Konum
Anahtar karakter eşleme dosyaları, USB satıcısına, ürün (ve isteğe bağlı olarak sürüm) kimliğine veya giriş cihazı adına göre bulunur.
Aşağıdaki yollara sırasıyla başvurulur.
-
/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ştururken, 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
adı verilen özel bir yerleşik anahtar karakter eşleme dosyası sağlar. Bu tuş karakter haritasının çeşitli standart harici klavyeleri desteklemesi amaçlanmıştır.
Genel anahtar karakter haritasını değiştirmeyin!
Sanal anahtar karakter eşleme dosyası
Sistem, sanal klavye aygıtları tarafından kullanılan, Virtual.kcm
adı verilen özel bir yerleşik anahtar karakter eşleme dosyası sağlar.
Sanal klavye aygıtı, kimliği -1 olan sentetik bir giriş aygıtıdır (bkz. KeyCharacterMap.VIRTUAL_KEYBOARD
). Android Honeycomb 3.0'dan itibaren tüm Android cihazlarda mevcuttur. Sanal klavye aygıtının amacı, yerleşik klavyeye sahip olmayan aygıtlar için bile IME veya test araçları yoluyla uygulamalara tuş vuruşlarını enjekte etmek için kullanılabilecek bilinen bir yerleşik giriş aygıtı sağlamaktır.
Sanal klavyenin, tüm cihazlarda aynı olan tam bir QWERTY düzenine sahip olduğu varsayılır. Bu, uygulamaların sanal klavye aygıtını kullanarak tuş vuruşlarını eklemesini ve her zaman aynı sonuçları almasını mümkün kılar.
Sanal anahtar karakter haritasını değiştirmeyin!
Sözdizimi
Anahtar karakter eşleme dosyası, klavye türü bildirimi ve bir dizi anahtar bildirimden oluşan düz metin dosyasıdır.
Klavye türü bildirimi
Klavye türü bildirimi, klavyenin genel davranışını açıklar. Bir karakter eşleme dosyası bir klavye türü bildirimi içermelidir. Açıklık sağlamak için genellikle dosyanın en üstüne 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. İstenilen harf veya simgeyi oluşturmak için bir tuşa birden çok kez basmak gerekebilir.
Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.
KeyCharacterMap.NUMERIC
karşılık gelir.PREDICTIVE
: Tüm harfleri içeren ancak tuş başına birden fazla harf içeren bir klavye.Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.
KeyCharacterMap.PREDICTIVE
karşılık gelir.ALPHA
: Tüm harflerin ve belki bazı rakamların bulunduğu bir klavye.Alfabetik klavye doğrudan metin girişini destekler ancak küçük bir form faktörüyle yoğunlaştırılmış bir düzene sahip olabilir.
FULL
klavyenin aksine, bazı sembollere yalnızca ekrandaki özel karakter seçiciler kullanılarak erişilebilir. Ek olarak, yazma hızını ve doğruluğunu artırmak için çerçeve, alfabetik klavyeler için otomatik büyük harf kullanımı ve geçişli/kilitli SHIFT ve ALT tuşları gibi özel olanaklar sağlar.Bu klavye türü genellikle başparmakla yazmak için tasarlanmıştır.
FULL
: Tam PC tarzı bir klavye.Tam bir klavye, bir PC klavyesi gibi davranır. Tüm sembollere, ekran desteği veya otomatik büyük harf kullanımı gibi olanaklar olmadan, klavyedeki tuşlara basılarak doğrudan erişilir.
Bu klavye türü genellikle iki elle tam yazma için tasarlanmıştır.
SPECIAL_FUNCTION
: Yazmak yerine yalnızca sistem kontrol işlevlerini gerçekleştirmek için kullanılan bir klavye.Özel işlevli bir klavye, gerçekte yazmak için kullanılmayan, yalnızca HOME ve POWER gibi yazdırma dışı tuşlardan oluşur.
Generic.kcm
ve Virtual.kcm
anahtar karakter haritalarının her ikisi de FULL
klavyelerdir.
Anahtar beyanlar
Anahtar key
her biri, anahtar sözcüğünden ve bunu takip eden bir Android anahtar kod adından, açık küme parantezinden, bir dizi özellik ve davranıştan ve kapalı küme parantezinden oluşur.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Özellikler
Her anahtar özelliği, bir anahtardan davranışa bir eşleme oluşturur. Anahtar karakter eşleme dosyalarını daha kompakt hale getirmek için, çeşitli özellikler virgülle ayrılarak aynı davranışa eşlenebilir.
Yukarıdaki örnekte label
özelliğine 'A'
davranışı atanmıştır. Benzer şekilde ctrl
, alt
ve meta
özelliklerinin tümüne aynı anda none
davranışı atanır.
Aşağıdaki özellikler tanınır:
label
: Tek karakterden oluştuğunda anahtarın üzerine fiziksel olarak basılan etiketi belirtir. Bu,KeyCharacterMap.getDisplayLabel
yöntemi tarafından döndürülen değerdir.number
: Kullanıcının bir telefon numarası yazarken olduğu gibi sayısal bir metin görünümü odağa alındığında davranışı (yazılması gereken karakter) belirtir.Kompakt klavyeler genellikle birden fazla sembolü tek bir tuşta birleştirir; öyle ki,
'1'
ve'a'
veya'#'
ve'q'
yazmak için aynı tuş kullanılabilir. Bu tuşlar içinnumber
özelliği, varsa sayısal bağlamda hangi sembolün yazılması gerektiğini gösterecek şekilde ayarlanmalıdır.Bazı tipik "sayısal" semboller
'0'
ile'9'
arası rakamlardır,'#'
,'+'
,'('
,')'
,','
ve'.'
.base
: Hiçbir değiştiriciye basılmadığında davranışı (yazılması gereken karakter) belirtir.<değiştirici> veya <değiştirici1>
+
<değiştirici2>+
...: Tuşa basıldığında ve belirtilen değiştiricilerin tümü etkin olduğunda davranışı (yazılması gereken karakter) belirtir.Örneğin, değiştirici özelliği
shift
SOL KAYDIRMA veya SAĞA KAYDIRMA değiştiricisine basıldığında uygulanan bir davranışı belirtir.Benzer şekilde
rshift+ralt
değiştirici özelliği, hem RIGHT SHIFT hem de RIGHT ALT değiştiricilerine birlikte basıldığında uygulanan davranışı belirtir.
Aşağıdaki değiştiriciler değiştirici özelliklerinde tanınır:
-
shift
: SOL KAYDIRMA veya SAĞ KAYDIRMA değiştiricisine basıldığında uygulanır. -
lshift
: LEFT SHIFT değiştiricisine basıldığında uygulanır. -
rshift
: SAĞA KAYDIRMA değiştiricisine basıldığında uygulanır. -
alt
: LEFT ALT veya RIGHT ALT değiştiricisine basıldığında uygulanır. -
lalt
: SOL ALT değiştiricisine basıldığında uygulanır. -
ralt
: SAĞ ALT değiştiricisine basıldığında uygulanır. -
ctrl
: SOL KONTROL veya SAĞ KONTROL değiştiricisine basıldığında uygulanır. -
lctrl
: SOL KONTROL değiştiricisine basıldığında uygulanır. -
rctrl
: SAĞ KONTROL değiştiricisine basıldığında uygulanır. -
meta
: LEFT META veya RIGHT META değiştiricisine basıldığında uygulanır. -
lmeta
: SOL META değiştiricisine basıldığında uygulanır. -
rmeta
: SAĞ META değiştiricisine basıldığında uygulanır. -
sym
: SEMBOL değiştiricisine basıldığında uygulanır. -
fn
: İŞLEV değiştiricisine basıldığında uygulanır. -
capslock
: CAPS LOCK değiştiricisi kilitli olduğunda uygulanır. -
numlock
: NUM LOCK değiştiricisi kilitli olduğunda uygulanır. -
scrolllock
: SCROLL LOCK değiştiricisi kilitli olduğunda uygulanır.
Gayrimenkullerin listelenme sırası önemlidir. Bir anahtarı bir davranışla eşleştirirken, sistem ilgili tüm özellikleri sırayla tarar ve bulduğu son uygulanabilir 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şleşir. En yaygın davranış bir karakter yazmaktır ancak başka davranışlar da vardır.
Aşağıdaki davranışlar tanınır:
none
: Bir karakter yazmayın.Bu davranış, hiçbir karakter belirtilmediğinde varsayılan davranıştır.
none
belirtilmemesi isteğe bağlıdır ancak netliği artırır.'X'
: Belirtilen karakterin değişmez değerini yazın.Bu davranış, belirtilen karakterin odaklanmış metin görünümüne girilmesine 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 (bunu ENTER / RETURN için kullanın). -
'\t'
: Bir SEKME karakteri yazın. -
'\''
: Bir kesme işareti karakteri yazın. -
'\"'
: Bir tırnak karakteri yazın. -
'\uXXXX'
: Kod noktası onaltılık olarak XXXX ile verilen Unicode karakterini yazın.
-
fallback
<Android anahtar kod adı>: Anahtar uygulama tarafından işlenmiyorsa varsayılan bir eylem gerçekleştirin.Bu davranış, bir uygulama belirtilen anahtarı yerel olarak işlemediğinde sistemin farklı bir tuşa basılmasını simüle etmesine neden olur. ESCAPE veya sayısal tuş takımı tuşları (numlock'a basılmadığında) gibi tüm uygulamaların nasıl işleyeceğini bilmediği yeni tuşlar için varsayılan davranışı desteklemek için kullanılır.
Bir geri dönüş davranışı gerçekleştirildiğinde, uygulama iki tuşa basılacaktır: biri orijinal anahtar için, diğeri seçilen geri dönüş anahtarı için. Uygulama, anahtarlama sırasında orijinal anahtarı işlerse, yedek anahtar olayı 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ü imleçten önceki dört karakteri tüketir ve kaldırır, bunları onaltılık basamaklar olarak yorumlar ve karşılık gelen 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örüntülenir.
Sistem, aksanlı ölü anahtar karakterlerini birleştiren aşağıdaki Unicode karakterleri tanır:
-
'\u0300'
: Ciddi aksan. -
'\u0301'
: Akut vurgu. -
'\u0302'
: Çevresel vurgu. -
'\u0303'
: Tilde aksanı. -
'\u0308'
: Çift nokta vurgusu.
Bir ölü anahtarın ardından başka bir karakter yazıldığında, ölü anahtar ve aşağıdaki karakterler oluşturulur. Örneğin, kullanıcı bir mezar vurgusu ölü anahtarı ve ardından 'a' harfini yazdığında sonuç 'à' olur.
Ölü anahtar yönetimi hakkında daha fazla bilgi için KeyCharacterMap.getDeadChar
bakın.
Yorumlar
Yorum satırları '#' ile başlar ve satırın sonuna kadar devam eder. Bunun gibi:
# A comment!
Boş satırlar dikkate alınmaz.
Tuş kombinasyonları davranışlarla nasıl eşlenir?
Kullanıcı bir tuşa bastığında sistem, o tuşa basılması ve o anda basılan değiştiricilerin kombinasyonuyla ilişkili davranışı arar.
ÜST KRKT + A
Kullanıcının A ve SHIFT tuşlarına birlikte bastığını varsayalım. Sistem ilk önce KEYCODE_A
ile ilişkili özellik ve davranış kümesini bulur.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Sistem, özel olan label
ve number
özelliklerini göz ardı ederek, özellikleri baştan sona ve soldan sağa doğru tarar.
Karşılaşılan ilk özellik base
. base
özelliği, hangi değiştiricilere 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, esasen anahtarın varsayılan davranışını belirtir. base
özellik bu tuşa basıldığında geçerli olduğundan, sistem davranışının 'a'
olduğunu not eder ( a
karakterini yazın).
Daha sonra sistem, herhangi birinin base
daha spesifik olması durumunda sonraki özellikleri taramaya devam eder ve onu geçersiz kılar. SHIFT + A tuşuna basıldığında da geçerli olan shift
ile karşılaşır. Böylece sistem, base
özelliğin davranışını göz ardı etmeye karar verir ve 'A'
olan shift
özelliğiyle ilişkili davranışı seçer ( A
karakterini yazın).
Daha sonra tabloyu taramaya devam eder, ancak bu tuş basımına başka hiçbir özellik uygulanmaz (CAPS LOCK kilitli değildir, ne CONTROL tuşuna basılmıştır, ne ALT tuşuna basılmıştır ve ne META tuşuna basılmıştır).
Dolayısıyla SHIFT + A tuş kombinasyonunun sonuç davranışı 'A'
olur.
KONTROL + A
Şimdi kullanıcı A ve CONTROL tuşlarına birlikte basarsa ne olacağını düşünün.
Daha önce olduğu gibi sistem özellikler tablosunu tarayacaktı. base
özelliğin uygulandığını fark edecek, ancak sonunda control
özelliğine ulaşana kadar taramaya devam edecektir. Olduğu gibi, control
özelliği base
sonra görünür, böylece davranışı base
davranışı geçersiz kılar.
Yani CONTROL + A tuş birleşimi için ortaya çıkan davranış none
olur.
KAÇMAK
Şimdi kullanıcının ESCAPE'e bastığını varsayalım.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
Bu kez sistem, bir geri dönüş davranışı olan fallback BACK
davranışını elde eder. Hiçbir karakter değişmezi görünmediğinden, hiçbir karakter yazılmayacaktır.
Anahtar işlenirken sistem ilk olarak uygulamaya KEYCODE_ESCAPE
teslim edecektir. Uygulama bunu başaramazsa, sistem tekrar deneyecektir ancak bu sefer, geri dönüş davranışının gerektirdiği şekilde uygulamaya KEYCODE_BACK
teslim edecektir.
Dolayısıyla, KEYCODE_ESCAPE
tanıyan ve destekleyen uygulamalar, onu olduğu gibi işleme fırsatına sahiptir, ancak bunu yapmayan diğer uygulamalar bunun yerine, anahtarı KEYCODE_BACK
gibi ele alan geri dönüş eylemini gerçekleştirebilir.
NUM LOCK ile veya NUM LOCK olmadan NUMPAD_0
Sayısal tuş takımı tuşlarının, NUM LOCK tuşunun kilitli olup olmamasına bağlı olarak çok farklı anlamları vardır.
Aşağıdaki anahtar bildirimi, NUM LOCK'a basıldığında KEYCODE_NUMPAD_0
0
yazmasını sağlar. NUM LOCK'a basılmadığında anahtar uygulamaya her zamanki gibi iletilir ve işlenmezse bunun yerine KEYCODE_INSERT
geri dönüş anahtarı teslim edilir.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
Görebildiğimiz gibi, geri dönüş tuşu bildirimleri, tam bilgisayar tarzı bir klavyede bulunan tüm tuşları 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 pedi
# 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özdizimi kullanılarak belirtiliyordu ve derleme sırasında ikili dosya biçiminde ( .kcm.bin
) derleniyordu.
Yeni format aynı .kcm
uzantısını kullansa da sözdizimi oldukça farklıdır (ve çok daha güçlüdür).
Android Honeycomb 3.0'dan itibaren, tüm Android anahtar karakter eşleme dosyalarının bu belgede açıklanan yeni sözdizimini ve düz metin dosyası biçimini kullanması gerekir. Eski sözdizimi desteklenmiyor ve eski .kcm.bin
dosyaları sistem tarafından tanınmıyor.
Dil notu
Android şu anda çok dilli klavyeleri desteklemiyor. Ayrıca yerleşik genel anahtar karakter haritası, ABD İngilizcesi klavye düzenini varsayar.
OEM'lerin, klavyeleri başka diller için tasarlanmışsa, özel tuş karakter haritaları sağlamaları teşvik edilir.
Android'in gelecek sürümleri, çok dilli klavyeler veya kullanıcı tarafından seçilebilen klavye düzenleri için daha iyi destek sağlayabilir.
Doğrulama
Anahtar Haritaları Doğrula aracını kullanarak anahtar karakter haritası dosyalarınızı doğruladığınızdan emin olun.