Anahtar düzeni dosyaları (.kl
dosyaları), Linux anahtar kodlarını ve eksen kodlarını Android anahtar kodlarıyla ve eksen kodlarıyla eşler ve ilişkili politika işaretlerini belirtir.
Cihaza özel tuş düzeni dosyaları şunlardır:
- Ses, güç ve mikrofonlu kulaklık medya tuşları gibi özel tuşlar dahil olmak üzere tuşlara sahip dahili (yerleşik) giriş cihazları için zorunludur.
- Diğer giriş cihazları için isteğe bağlıdır ancak özel amaçlı klavyeler ve kontrol çubukları için önerilir.
Cihaza özgü bir anahtar düzeni dosyası yoksa sistem bunun yerine varsayılan bir anahtar düzeni seçer.
Konum
Anahtar düzeni 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/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
/odm/usr/keylayout/DEVICE_NAME.kl
/vendor/usr/keylayout/DEVICE_NAME.kl
/system/usr/keylayout/DEVICE_NAME.kl
/data/system/devices/keylayout/DEVICE_NAME.kl
/odm/usr/keylayout/Generic.kl
/vendor/usr/keylayout/Generic.kl
/system/usr/keylayout/Generic.kl
/data/system/devices/keylayout/Generic.kl
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 düzeni dosyası
Sistem, Generic.kl
adlı özel bir yerleşik genel anahtar düzeni dosyası sağlar. Bu tuş düzeni, çeşitli standart harici klavyeler ve kontrol çubuklarını desteklemek için tasarlanmıştır. Genel anahtar düzenini değiştirmeyin.
Sözdizimi
Anahtar düzeni dosyası, anahtar veya eksen tanımlarından ve işaretlerinden oluşan düz metin dosyasıdır.
Anahtar beyanları
Anahtar bildirimleri, key
anahtar kelimesinin ardından bir Linux anahtar kodu numarası ve Android anahtar kodu adından veya anahtar kelimesinin ardından bir HID kullanımı ve Android anahtar kodu adından oluşur. HID kullanımı, 32 bitlik bir tam sayı olarak temsil edilir. Üstteki 16 bit, HID kullanım sayfasını, alttaki 16 bit ise HID kullanım kimliğini temsil eder. Her iki beyanın ardından, boşlukla ayrılmış isteğe bağlı bir politika işareti grubu gelebilir.
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
Aşağıdaki politika işaretleri tanınır:
FUNCTION
: Anahtar, FUNCTION tuşuna da basılmış gibi yorumlanmalıdır.GESTURE
: Dokunmatik ekranı avuçla kaplama gibi bir kullanıcı hareketi tarafından oluşturulan anahtar.VIRTUAL
: Anahtar, ana dokunmatik ekranın yanındaki sanal bir yumuşak anahtardır (kapasitif düğme). Bu, özel bir debouncing mantığının etkinleştirilmesine neden olur (aşağıya bakın).
Eksen beyanları
Eksen tanımlarının her biri, axis
anahtar kelimesinin ardından bir Linux eksen kodu numarası ve en az bir Android eksen kodu adı da dahil olmak üzere eksenin davranışını kontrol eden niteliklerden oluşur.
Temel eksenler
Temel eksen, bir Linux eksen kodunu bir Android eksen kodu adıyla eşler. Aşağıdaki beyan, ABS_X
(0x00
ile gösterilir) ile AXIS_X
(X
ile gösterilir) arasında eşleme yapar.
axis 0x00 X
Yukarıdaki örnekte, ABS_X
değerinin 5
olması durumunda AXIS_X
5
olarak ayarlanır.
Bölünmüş eksenler
Bölünmüş eksen, bir Linux eksen kodunu iki Android eksen kodu adıyla eşler. Böylece, eşlendiğinde bir eşiğin altındaki veya üstündeki değerler iki farklı eksene bölünür. Bu eşleme, cihaz tarafından raporlanan tek bir fiziksel eksen, birbirini hariç tutan iki farklı mantıksal ekseni kodlarken kullanışlıdır.
Aşağıdaki beyan, ABS_Y
ekseninin (0x01
ile gösterilir) değerlerini 0x7f
'den küçük olduğunda AXIS_GAS
, 0x7f
'den büyük olduğunda ise AXIS_BRAKE
ile eşler.
axis 0x01 split 0x7f GAS BRAKE
Yukarıdaki örnekte, ABS_Y
değerinin 0x7d
olması durumunda AXIS_GAS
2
(0x7f - 0x7d
) ve AXIS_BRAKE
0
olarak ayarlanır. Buna karşılık, ABS_Y
değerinin 0x83
olması durumunda AXIS_GAS
0
, AXIS_BRAKE
ise 4
(0x83 - 0x7f
) değerine ayarlanır. Son olarak, ABS_Y
değerinin 0x7f
değerine bölünmesiyle elde edilen değere eşit olması durumunda hem AXIS_GAS
hem de AXIS_BRAKE
0
değerine ayarlanır.
Ters eksenler
Ters çevrilmiş bir eksen, eksen değerinin işaretini tersine çevirir. Aşağıdaki bildirim, ABS_RZ
'ü (0x05
ile gösterilir) AXIS_BRAKE
'ye (BRAKE
ile gösterilir) eşler ve sonucu olumsuzlayarak tersine çevirir.
axis 0x05 invert BRAKE
Yukarıdaki örnekte, ABS_RZ
değerinin 2
olması durumunda AXIS_BRAKE
-2
olarak ayarlanır.
Daire ortası seçeneği
Kontrol çubuğu cihazı, kontrol çubuğu kullanılmadığında bile gürültü nedeniyle giriş etkinlikleri bildirebilir. Bu gürültü genellikle sol ve/veya sağ çubuklardan gelir ve sürücünün 0'a yakın bir konum değeri bildirmesine neden olur. "Orta düz" değeri, kumandanızın sabit durumdayken çıkaracağı gürültü miktarını belirtir.
Linux giriş protokolü, giriş cihazı sürücülerinin kontrol çubuğu eksenlerinin merkez düz değerini belirtmesi için bir yol sağlar ancak tüm sürücüler bunu bildirmez ve bazıları yanlış değerler sağlar. Bu sorunu çözmek için eksen beyanının ardından, eksenin merkez konumu etrafındaki bölgenin genişliğini belirten ve merkezlenmiş olarak kabul edilmesi gereken bir flat
seçeneği gelebilir.
Örneğin, bir cihaz sürücüsü AXIS_X
için 0 ile 100 arasında değerler bildirirse Android giriş sistemi 0 değerini -1 ile, 100 değerini ise 1 ile eşler.
Aralığın merkezi, ölçeklenmemiş koordinatlarda 50, ölçeklendirilmiş koordinatlarda ise 0 olur.
Düz bir değer 10'a eşitse geliştiriciler, -0,1 ile 0,1 arasında (ölçeklenmemiş koordinatlarda 40 ile 60 arasında) raporlanan tüm AXIS_X
değerlerinin gürültü olduğunu varsaymalı ve kontrol çubuğundan gelen bu değerleri sıfır olarak ele almalıdır.
Not: Anahtar düzeni dosyası, sürücü koordinat alanı için değeri belirtirken android.view.InputDevice.MotionRange#getFlat() tarafından bildirilen değer Android koordinat alanındadır.
axis 0x03 Z flat 4096
Yukarıdaki örnekte, merkez düz değeri 4096
olarak ayarlanmıştır.
Yorumlar
Yorum satırları # ile başlar ve satırın sonuna kadar devam eder:
# A comment!
Boş satırlar yoksayılır.
Örnekler
Klavye
# This is an example of a key layout file for a keyboard. key 1 ESCAPE key 2 1 key 3 2 key 4 3 key 5 4 key 6 5 key 7 6 key 8 7 key 9 8 key 10 9 key 11 0 key 12 MINUS key 13 EQUALS key 14 DEL # etc...
Sistem kontrolleri
# This is an example of a key layout file for basic system controls, # such as volume and power keys which are typically implemented as GPIO pins # the device decodes into key presses. key 114 VOLUME_DOWN key 115 VOLUME_UP key 116 POWER
Kapasitif düğmeler
# This is an example of a key layout file for a touch device with capacitive buttons. key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
Mikrofonlu kulaklık jakı medya kontrolleri
# This is an example of a key layout file for headset mounted media controls. # A typical headset jack interface might have special control wires or detect known # resistive loads as corresponding to media functions or volume controls. # This file assumes that the driver decodes these signals and reports media # controls as key presses. key 163 MEDIA_NEXT key 165 MEDIA_PREVIOUS key 226 HEADSETHOOK
Kontrol çubuğu
# This is an example of a key layout file for a joystick. # These are the buttons that the joystick supports, represented as keys. key 304 BUTTON_A key 305 BUTTON_B key 307 BUTTON_X key 308 BUTTON_Y key 310 BUTTON_L1 key 311 BUTTON_R1 key 314 BUTTON_SELECT key 315 BUTTON_START key 316 BUTTON_MODE key 317 BUTTON_THUMBL key 318 BUTTON_THUMBR # Left and right stick. # The reported value for flat is 128 in a range of -32767 to 32768, which is absurd. # This confuses applications that rely on the flat value because the joystick # actually settles in a flat range of +/- 4096 or so. We override it here. axis 0x00 X flat 4096 axis 0x01 Y flat 4096 axis 0x03 Z flat 4096 axis 0x04 RZ flat 4096 # Triggers. axis 0x02 LTRIGGER axis 0x05 RTRIGGER # Hat. axis 0x10 HAT_X axis 0x11 HAT_Y
Sanal yumuşak tuşlar
Giriş sistemi, aşağıdaki kullanım alanlarında sanal yumuşak tuşlar uygulamak için özel özellikler sunar:
- Sanal yumuşak tuşlar ekranda grafik olarak gösteriliyorsa (ör. Galaxy Nexus'ta) Sistem Kullanıcı Arayüzü paketindeki Gezinme Çubuğu bileşeni tarafından uygulanır. Grafiksel sanal yumuşak tuşlar sistemde üst katmanda uygulandığından anahtar düzeni dosyaları kullanılmaz ve aşağıdaki bilgiler geçerli değildir.
- Sanal yumuşak tuşlar, ana dokunmatik ekranın bir parçası olan genişletilmiş bir dokunulabilir bölge olarak uygulanırsa (Nexus One'da olduğu gibi) giriş sistemi, X/Y dokunma koordinatlarını Linux anahtar kodlarına dönüştürmek için sanal bir anahtar haritası dosyası kullanır, ardından Linux anahtar kodlarını Android anahtar kodlarına dönüştürmek için anahtar düzeni dosyasını kullanır (sanal anahtar haritası dosyaları hakkında ayrıntılı bilgi için Dokunmatik cihazlar bölümüne bakın). Dokunmatik ekran giriş cihazının anahtar düzeni dosyası, uygun anahtar eşlemesini belirtmeli ve her anahtar için
VIRTUAL
işaretini içermelidir. - Sanal yumuşak tuşlar, ana dokunmatik ekrandan ayrı kapasitif düğmeler olarak uygulanırsa (Nexus S'de olduğu gibi) dokunmaları Linux anahtar kodlarına dönüştürmekten çekirdek cihaz sürücüsü veya donanım yazılımı sorumludur. Giriş sistemi daha sonra anahtar düzeni dosyasını kullanarak bu anahtar kodlarını Android anahtar kodlarına dönüştürür.
Kapasitif düğme giriş cihazının anahtar düzeni dosyası, uygun anahtar eşlemesini belirtmeli ve her anahtar için
VIRTUAL
işaretini içermelidir.
Sanal yumuşak tuşlar dokunmatik ekranın içinde veya yakın fiziksel yakınında olduğunda, kullanıcıların ekranın alt kısmına dokunurken veya parmaklarını ekranda yukarıdan aşağıya ya da aşağıdan yukarıya doğru kaydırırken yanlışlıkla bir düğmeye basması kolaydır. Bunu önlemek için giriş sistemi, dokunmatik ekrana yapılan en son dokunma işleminden sonra sanal yumuşak tuş basışlarının kısa bir süre boyunca yoksayılması için küçük bir sönümleme uygular (bu gecikmeye sanal tuş sessiz süresi denir).
Sanal yumuşak tuş tıklama gecikmesini etkinleştirmek için:
- Dokunmatik ekran veya kapasitif düğme giriş cihazı için her anahtar için
VIRTUAL
işaretinin ayarlandığı bir anahtar düzeni dosyası sağlayın.key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- Çerçeve
config.xml
kaynağı için bir kaynak yer paylaşımında sanal anahtar sessiz zaman değerini ayarlayın.<!-- Specifies the amount of time to disable virtual keys after the screen is touched to filter out accidental virtual key presses due to swiping gestures or taps near the edge of the display. May be 0 to disable the feature. It is recommended that this value be no more than 250 ms. This feature should be disabled for most devices. --> <integer name="config_virtualKeyQuietTimeMillis">250</integer>
Doğrulama
Klavye Haritalarını Doğrulama aracını kullanarak klavye düzeni dosyalarınızı doğrulamanız gerekir.