虛擬按鍵(Virtual Key)是Eclair版本開始增加的新特性。Virtual Key的功能是利用觸摸屏,模擬按鍵發(fā)生的事件,這樣就可以利用觸摸屏的邊緣,實(shí)現(xiàn)一些可以自定義的按鍵效果。
虛擬按鍵的實(shí)現(xiàn)效果如圖8-5所示。
在Android系統(tǒng)中,觸摸屏設(shè)備發(fā)送的是RawInputEvent(原始輸入事件),而按鍵發(fā)送的是KeyEvent(按鍵事件)。KeyEvent直接發(fā)送給應(yīng)用程序?qū)?,RawInputEvent在Android的Java框架中被轉(zhuǎn)換成MotionEvent發(fā)送給應(yīng)用程序?qū)印?/p>
在Android系統(tǒng)中虛擬按鍵的實(shí)現(xiàn)方法是:在某種情況下,將RawInputEvent轉(zhuǎn)換成KeyEvent。
frameworks/base/services/Java/com/android/server目錄中的InputDevice.Java文件負(fù)責(zé)處理虛擬按鍵的主要文件。
虛擬按鍵的處理相對(duì)簡(jiǎn)單,需要根據(jù)以下文件對(duì)虛擬按鍵的內(nèi)容進(jìn)行配置:
/sys/board_properties/virtualkeys.{devicename}
在InputDevice.Java文件中通過readVirtualKeys,對(duì)進(jìn)行消息的轉(zhuǎn)化。根據(jù)配置文件將RawInputEvent轉(zhuǎn)換成按鍵相關(guān)的內(nèi)容。
virtualkeys.{devicename}是虛擬按鍵的適配文件,需要在目標(biāo)文件系統(tǒng)的/sys/board_ properties/目錄中。
虛擬按鍵配置文件的格式如下所示: