Tệp bố cục phím

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_X5 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_Y0x7d 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_Y0x83, sau đó AXIS_GAS được đặt thành 0AXIS_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_GASAXIS_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_RZ2 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:

  1. 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.
  2. 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á.
  3. 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:

  1. 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
    
  2. Đặ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.