Tệp bố cục phím (.kl
tệp) ánh xạ các mã phím và mã trục Linux
vào mã khoá Android và mã trục, đồng thời chỉ định cờ chính sách liên quan.
Các tệp bố cục chính dành riêng cho thiết bị là:
- Bắt buộc đối với thiết bị đầu vào nội bộ (tích hợp) có khoá, bao gồm cả các phím đặc biệt như âm lượng, phím nguồn và phím phương tiện trên tai nghe.
- Không bắt buộc đối với các thiết bị đầu vào khác nhưng nên dùng đối với bàn phím và cần điều khiển chuyên dụng.
Nếu không có tệp bố cục phím dành riêng cho thiết bị nào, hệ thống sẽ chọn một mặc định.
Vị trí
Tệp bố cục chính được định vị theo nhà cung cấp USB, sản phẩm (và phiên bản không bắt buộc) id hoặc theo tên thiết bị đầu vào. Các đường dẫn sau được tham khảo theo thứ tự:
/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
Khi tạo đường dẫn tệp chứa tên thiết bị, tất cả các ký tự trong tên thiết bị, ngoại trừ '0'-'9', 'a'-'z', "A"-'Z', '-' hoặc '_' được thay thế bằng "_".
Tệp bố cục khoá chung
Hệ thống này cung cấp tệp bố cục khoá chung tích hợp sẵn đặc biệt được gọi là
Generic.kl
. Bố cục phím này nhằm hỗ trợ nhiều
cần điều khiển và bàn phím bên ngoài chuẩn. Không sửa đổi khoá chung
bố cục!
Cú pháp
Tệp bố cục khoá là một tệp văn bản thuần tuý bao gồm các nội dung khai báo trục hoặc khoá và cờ.
Nội dung khai báo khoá
Các nội dung khai báo khoá bao gồm từ khoá key
, theo sau là Linux
mã khóa và tên mã khóa Android hoặc việc sử dụng từ khóa theo sau là
Cách sử dụng HID và tên mã khoá Android. Việc sử dụng HID được biểu thị dưới dạng 32 bit
số nguyên, trong đó giá trị cao 16 bit đại diện cho trang sử dụng HID và phiên bản 16 bit thấp
biểu thị mã nhận dạng sử dụng HID. Có thể theo sau một nội dung khai báo là một thuộc tính không bắt buộc
bộ cờ chính sách được phân tách bằng khoảng trắng.
key 1 ESCAPE key 114 VOLUME_DOWN key 16 Q VIRTUAL key usage 0x0c006F BRIGHTNESS_UP
Các cờ chính sách sau đây được nhận dạng:
FUNCTION
: Khoá phải được diễn giải như thể khoá FUNCTION cũng được nhấn.GESTURE
: Khoá được tạo bằng một cử chỉ của người dùng, chẳng hạn như tì tay màn hình cảm ứng.VIRTUAL
: Khoá là một phím mềm ảo (nút điện dung) bên cạnh màn hình cảm ứng chính. Điều này khiến logic loại bỏ đặc biệt trở thành đã bật (xem bên dưới).
Khai báo trục
Mỗi nội dung khai báo trục bao gồm từ khoá axis
, theo sau là một
Số mã trục Linux và bộ hạn định kiểm soát hành vi của trục
bao gồm ít nhất một tên mã trục Android.
Trục cơ bản
Một trục cơ bản chỉ ánh xạ một mã trục Linux với tên mã trục Android. Chiến lược phát hành đĩa đơn
bản đồ khai báo sau đây ABS_X
(được biểu thị bằng 0x00
)
đến AXIS_X
(được biểu thị bằng X
).
axis 0x00 X
Trong ví dụ trên, nếu giá trị của ABS_X
là 5
thì AXIS_X
được đặt thành 5
.
Tách trục
Trục chia tách sẽ ánh xạ một mã trục Linux với hai tên mã trục Android, sao cho các giá trị nhỏ hơn hoặc lớn hơn ngưỡng được chia thành hai trục khác nhau khi được ánh xạ. Việc ánh xạ này rất hữu ích khi một trục vật lý duy nhất được báo cáo bởi thiết bị mã hoá hai trục logic loại trừ lẫn nhau khác nhau.
Nội dung khai báo sau đây ánh xạ các giá trị của trục ABS_Y
(được biểu thị bằng 0x01
) thành AXIS_GAS
khi nhỏ hơn
0x7f
hoặc đến AXIS_BRAKE
khi lớn hơn
0x7f
.
axis 0x01 split 0x7f GAS BRAKE
Trong ví dụ trên, nếu giá trị của ABS_Y
là 0x7d
thì AXIS_GAS
được đặt thành 2
(0x7f - 0x7d
)
và AXIS_BRAKE
được đặt thành 0
. Ngược lại, nếu giá trị
của ABS_Y
là 0x83
, sau đó AXIS_GAS
được đặt thành
0
và AXIS_BRAKE
được đặt thành 4
(0x83 - 0x7f
). Cuối cùng, nếu giá trị của ABS_Y
bằng
giá trị phân tách của 0x7f
, sau đó cả AXIS_GAS
và
AXIS_BRAKE
được đặt thành 0
.
Trục đảo ngược
Trục ngược sẽ đảo ngược dấu của giá trị trục. Nội dung sau đây
khai báo ánh xạ ABS_RZ
(được biểu thị bằng 0x05
) đến
AXIS_BRAKE
(được biểu thị bằng BRAKE
) và đảo ngược
đầu ra bằng cách phủ định nó.
axis 0x05 invert BRAKE
Trong ví dụ trên, nếu giá trị của ABS_RZ
là 2
thì AXIS_BRAKE
sẽ được đặt thành -2
.
Lựa chọn căn giữa
Một thiết bị cần điều khiển có thể báo cáo các sự kiện nhập ngay cả khi bạn không sử dụng cần điều khiển do có tiếng ồn. Tiếng ồn này thường phát ra từ gậy bên trái và/hoặc bên phải và khiến người lái xe báo cáo một giá trị vị trí gần bằng 0. "Trung tâm phẳng" giá trị chỉ định độ nhiễu mong đợi từ bộ điều khiển khi nghỉ ngơi.
Giao thức đầu vào Linux cung cấp cách thức để trình điều khiển thiết bị đầu vào chỉ định
giá trị đường phẳng tâm của các trục cần điều khiển, nhưng không phải người lái xe nào cũng báo cáo giá trị đó và một số trục
giá trị không chính xác. Để giải quyết vấn đề này, có thể khai báo trục bằng một
Tuỳ chọn flat
chỉ định chiều rộng của khu vực xung quanh trung tâm
vị trí của trục được coi là trọng tâm.
Ví dụ: nếu trình điều khiển thiết bị báo cáo các giá trị cho AXIS_X
từ 0 đến 100,
sau đó 0 sẽ được ánh xạ tới -1 và 100 sẽ được hệ thống đầu vào Android ánh xạ tới 1.
Tâm của dải ô sẽ là 50 trong toạ độ chưa được điều chỉnh theo tỷ lệ và 0 trong toạ độ được điều chỉnh theo tỷ lệ.
Nếu một giá trị cố định bằng 10,
thì nhà phát triển sẽ giả định rằng mọi giá trị AXIS_X
được báo cáo trong khoảng
-0,1 và 0,1 (từ 40 đến 60 trong toạ độ không được tính tỷ lệ) là nhiễu và xử lý các giá trị đó đến
từ cần điều khiển bằng 0.
Lưu ý: Mặc dù tệp bố cục khoá chỉ định giá trị cho không gian toạ độ của người lái, giá trị được android.view.InputDevice.MotionScope#getFlat() báo cáo nằm trong Android không gian toạ độ.
axis 0x03 Z flat 4096
Trong ví dụ trên, giá trị giá trị phẳng ở giữa được thiết lập thành 4096
.
Bình luận
Các dòng nhận xét bắt đầu bằng # và tiếp tục đến cuối dòng:
# A comment!
Hệ thống sẽ bỏ qua các dòng trống.
Ví dụ
Bàn phím
# 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...
Cài đặt hệ thống
# 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
Nút điện dung
# 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
Nút điều khiển nội dung nghe nhìn cho giắc tai nghe
# 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
Joystick
# 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
Phím mềm ảo
Hệ thống nhập dữ liệu cung cấp các tính năng đặc biệt để triển khai khoá mềm ảo trong các trường hợp sử dụng sau:
- Nếu các phím mềm ảo xuất hiện dưới dạng đồ hoạ trên màn hình (chẳng hạn như trên Galaxy Nexus), chúng được triển khai bởi thành phần Thanh điều hướng trong Gói giao diện người dùng hệ thống. Bởi vì các phím ảo đồ hoạ được triển khai ở cấp độ cao trong hệ thống, các tệp bố cục khoá không có liên quan và không áp dụng.
- Nếu các phím mềm ảo được triển khai dưới dạng một khu vực có thể chạm mở rộng
là một phần của màn hình cảm ứng chính (chẳng hạn như trên Nexus One), chế độ nhập
hệ thống sử dụng tệp bản đồ phím ảo để dịch toạ độ điểm chạm X/Y thành
Mã phím Linux, sau đó sử dụng tệp bố cục phím để dịch mã phím Linux sang
Mã phím Android (để biết thông tin chi tiết về tệp sơ đồ khoá ảo, hãy xem
Thiết bị cảm ứng). Tệp bố cục chính cho
thiết bị đầu vào trên màn hình cảm ứng phải chỉ định sơ đồ phím thích hợp và bao gồm
cờ
VIRTUAL
cho từng khoá. - Nếu các phím mềm ảo được triển khai dưới dạng các nút điện dung tách biệt với
màn hình cảm ứng chính (chẳng hạn như trên Nexus S), trình điều khiển thiết bị nhân hoặc
chương trình cơ sở chịu trách nhiệm chuyển các thao tác chạm thành mã phím Linux mà
hệ thống đầu vào sau đó dịch thành mã phím Android bằng cách sử dụng tệp bố cục khoá.
Tệp bố cục khoá cho thiết bị đầu vào của nút điện dung phải chỉ định
ánh xạ khoá thích hợp và thêm cờ
VIRTUAL
cho mỗi khoá.
Khi phím mềm ảo được đặt trong hoặc gần màn hình cảm ứng, người dùng rất dễ vô tình nhấn nút khi chạm vào gần cuối màn hình hoặc khi trượt ngón tay từ trên xuống dưới hoặc từ dưới lên trên màn hình. Để ngăn chặn điều này, hệ thống đầu vào sẽ áp dụng một chút loại bỏ sao cho các lần nhấn phím mềm ảo bị bỏ qua trong một khoảng thời gian ngắn thời gian kể từ lần chạm gần đây nhất trên màn hình cảm ứng (độ trễ này được gọi là thời gian yên tĩnh của khoá ảo).
Cách bật tính năng gỡ bỏ khoá mềm ảo:
- Cung cấp tệp bố cục phím cho màn hình cảm ứng hoặc nút điện dung
thiết bị đầu vào có cờ
VIRTUAL
được đặt cho mỗi khoá.key 139 MENU VIRTUAL key 172 HOME VIRTUAL key 158 BACK VIRTUAL key 217 SEARCH VIRTUAL
- Đặt giá trị của thời gian yên tĩnh của khoá ảo trong lớp phủ tài nguyên cho
tài nguyên
config.xml
của khung.<!-- 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>
Xác nhận kết quả
Bạn nên xác thực các tệp bố cục chính bằng cách sử dụng Công cụ Xác thực sơ đồ bàn phím.