Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 增加按鍵

Android 增加按鍵

編輯:關於Android編程

============

Android 增加按鍵:

ScanCode -> KeyCodeLabel -> KeyCode -> Keyevent

-----

1) 鍵掃描碼ScanCode是由linux的Input驅動框架定義的整數類型,可參考input.h頭文件(./external/kernel-headers/original/linux/input.h)。

2) 按鍵碼(KeyCode),這個按鍵碼是一個整數,在上層的JAVA程序中主要通過這個值來判斷系統的實現。

----

實現過程:

1, ScanCode -> KeyCodeLabel。

鍵盤布局文件(*.kl) 把ScanCode轉換為KeyCodeLabel。 .kl文件在源碼的devices文件夾中或設備中的/system/usr/keylayout/.kl。

key 102 HOME

2,KeyCodeLabel -> KeyCode。

通過查找KEYCODES[]數組,得到KeyCodeLabel字符串對應的KeyCode值。KEYCODES[]在文件frameworks/base/include/ui/KeycodeLabels.h 中。

static const KeycodeLabel KEYCODES[] = {
...
{ "HOME", 3 },

在frameworks/base/native/include/android/keycodes.h中定義KeyCode的枚舉值。

enum {
....
AKEYCODE_HOME = 3,

3,KeyCode -> Keyevent。

KeyEvent.java中的對應KeyCode:(文件路徑:frameworks/base/core/java/android/view/KeyEvent.java)。如果改動了KeyEvent,影響到API則需要調用make update-api。

public static final int KEYCODE_HOME = 3;
....
names.append(KEYCODE_HOME, "KEYCODE_HOME");
....

4,在frameworks\base\core\res\res\values\attrs.xml中增加表示屬性的資源文件,添加相應用name="keycode"的attr。

keyevent.java中的注釋

// NOTE: If you add a new keycode here you must also add it to:

// isSystem()

// native/include/android/keycodes.h

// frameworks/base/include/ui/KeycodeLabels.h

// external/webkit/WebKit/android/plugins/ANPKeyCodes.h

// tools/puppet_master/PuppetMaster/nav_keys.py

// frameworks/base/core/res/res/values/attrs.xml

// commands/monkey/Monkey.java

// emulator?

//

// Also Android currently does not reserve code ranges for vendor-

// specific key codes. If you have new key codes to have, you

// MUST contribute a patch to the open source project to define

// those new codes. This is intended to maintain a consistent

// set of key code definitions across all Android devices.

=============

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved