編輯:關於Android編程
keycode是android定義好的,但是有時候無法滿足需要,進行定制化難免會涉及到新增加keycode。分成兩部分,驅動和framework,這裡主要講解framework部分:
1. 在下列文件中定義
如KEY_SMS
#defineKEY_SMS 252可能涉及的文件(可能還需要在別的文件):
kernel\include\linux\input.hbionic\libc\kernel\common\linux\input.h
external\kernel-headers\original\linux\input.h
external\qemu\linux_keycodes.h
2.增加keypad layout文件鍵盤映射,linux和androidkey映射
如:
key 252 SMS
注意所用版本和項目使用的KL文件,在adb shell中進入system/usr/keylyout/可以看到所用的KL,可以修改確認使用的KL
一般定義在kpd.c 的新按鍵會使用***-kpd.kl,也就是注冊input設備為***-kpd的會使用***-kpd.kl
新增加設備名稱的時候一般會使用generic.kl和qwerty.kl
generic.kl 和qwerty.kl 在alps/frameworks/base/data/keyboards/
***-kpd.kl在config/
其中252 是linux鍵碼,SMS是android識別key值 如果是需要喚醒系統,還需要增加WAKE
二、framework部分
1.修改Java識別keycodeframework/native/include/input/KeyCodelabels.h
KEYCODES數據結構後面增加
{"SMS",220}
framework/native/include/android/KeyCodes.h
在按鍵定義項增加AKEYCODE_SMS = 220;
2.修改Java 鍵盤事件
framework/base/core/java/android/view/keyevent.java
/**
*@hide
*/
public static final int KEYCODE_SMS =220;
最後的按鍵為新增的
private static final int LAST_KEYCODE==KEYCODE_SMS;
以上/**/注釋的code是android 非開放API或變量定義的時候,需要添加Java Doc的識別,否則要運行make update-api才能build通過
在KEYCODE_SYMBOLIC_NAMES 中增加name.append(KEYCODE_SMS, "KEYCODE_SMS");
如果是系統按鍵,修改framework/base/libs/ui/input.cpp
isSystemKey()增加case AKEYCODE_SMS:
3.修改XML文件描述符framework/base/core/res/res/values/attr.xml
4.增加測試驗證log在android
framework\base\policy\src\com\android\internal\polidy\impl\phoneWindowManager.java
在interceptKeyBeforeDispatching()增加
if(keycode== KeyEvent.KEYCODE_SMS){
log.d(TAG, "interceptKeyTi KEYCODE_SMS keyCode="+ keyCode + " down=" + down + "repeatCount=" + repeatCount + “ keyguardOn=” + keyguardOn + “mHomePressed=” + mHomePressed + “ cancled=” + canceled)
p.s.並不是所有的linux keycode framework都會支持處理,如果您需要增加很多按鍵,就可能超出256(如Touch Panel的手勢識別會用到很到鍵)
inputreader.cpp的KeyboardInputMapper這個class的process函數會先判斷是否是isKeyboardOrGamepadKey. 這裡面會對按鍵的大小進行判斷,條件是: 1.小於272 2.大於352 3.大於等於256且小於272 4.大於等於288且小於320 滿足其一即可。 否則會攔截掉,不會往inputDispatcher和phonewindowmanager.java走按照以上步驟修改代碼,即可在android系統中增加一個新的keycode。
就在前幾天的一個晚上, Google召開了它的秋季發布會, 毫無懸念的宣布了它的最新手機品牌Pixel, 與此同時我的nexus設備也從親兒子降級成為干兒子. 不過還好G
背景隨著 Material Design設計概念的提出,使得很多的開發過程中對動畫和UI的優化越來越重要,其中一個重要的動畫就是Material Deisgn : Mat
7CollapsingToolbarLayoutCollapsingToolbarLayout是Toolbar的一個包裝,可以做出很多很炫的折疊效果。toolbar伸縮t
一、效果圖二、描述更改Android項目中的語言,這個作用於只用於此APP,不會作用於整個系統三、解決方案(一)布局文件<LinearLayout xmlns:an