Android物理鍵盤(pán)事件解析
前言
Android設(shè)備連接物理鍵盤(pán)其實(shí)是個(gè)挺小眾的需求,其實(shí)Android設(shè)備本身就是支持物理鍵盤(pán),dispatchKeyEvent()這個(gè)方法就可以監(jiān)聽(tīng)物理鍵盤(pán),這里提供一個(gè)封裝的類(lèi),解析鍵盤(pán)事件。有很多事件,具體可以去看KeyEvent這個(gè)類(lèi)的源碼,我這里只處理的數(shù)字鍵盤(pán)。
實(shí)現(xiàn)方式
1.鍵盤(pán)事件解析類(lèi)
public class DispatchKeyResolver {
public OnKeyInputListener keyInputListener;
public void resolveKeyEvent(KeyEvent event) {
getInputChar(event);
}
public void getInputChar(KeyEvent event) {
int keyCode = event.getKeyCode();
char aChar;
if(keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
//數(shù)字
aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0);
} else if(keyCode >= KeyEvent.KEYCODE_NUMPAD_0 && keyCode <= KeyEvent.KEYCODE_NUMPAD_9) {
//數(shù)字
aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_NUMPAD_0);
} else {
//其他符號(hào)
switch(keyCode) {
case KeyEvent.KEYCODE_PERIOD:
aChar = '.';
break;
case KeyEvent.KEYCODE_NUMPAD_DOT:
aChar = '.';
break;
default:
return;
}
}
keyInputListener.onKeyInput(aChar);
}
public void setKeyInputListener(OnKeyInputListener keyInputListener) {
this.keyInputListener = keyInputListener;
}
public interface OnKeyInputListener {
void onKeyInput(char aChar);
}
}
2.設(shè)置監(jiān)聽(tīng)
DispatchKeyResolver dr = new DispatchKeyResolver();
//設(shè)置事件回調(diào)
dr.setKeyInputListener(...)
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
//物理鍵確定,并且是按下的行為(避免兩次響應(yīng))
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
dr.resolveKeyEvent(event)
}
return super.dispatchKeyEvent(event);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解析android中隱藏與顯示軟鍵盤(pán)及不自動(dòng)彈出鍵盤(pán)的實(shí)現(xiàn)方法
- Android 設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤(pán)
- Android 顯示和隱藏軟鍵盤(pán)的方法(手動(dòng))
- Android制作漂亮自適布局鍵盤(pán)的方法
- Android 軟鍵盤(pán)彈出時(shí)把原來(lái)布局頂上去的解決方法
- 5種方法完美解決android軟鍵盤(pán)擋住輸入框方法詳解
- Android鍵盤(pán)顯示與隱藏代碼
- Android軟鍵盤(pán)遮擋的四種完美解決方案
- Android實(shí)現(xiàn)彈出鍵盤(pán)的方法
- Android中監(jiān)聽(tīng)軟鍵盤(pán)顯示狀態(tài)實(shí)現(xiàn)代碼
相關(guān)文章
Android入門(mén)之讀寫(xiě)本地文件的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)讀寫(xiě)本地文件的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-12-12
Flutter?將Dio請(qǐng)求轉(zhuǎn)發(fā)原生網(wǎng)絡(luò)庫(kù)的實(shí)現(xiàn)方案
這篇文章主要介紹了Flutter?將Dio請(qǐng)求轉(zhuǎn)發(fā)原生網(wǎng)絡(luò)庫(kù),需要注意添加NativeNetInterceptor,如果有多個(gè)攔截器,例如LogInterceptors等等,需要將NativeNetInterceptor放到最后,需要的朋友可以參考下2022-05-05
Android開(kāi)發(fā)教程之ContentProvider數(shù)據(jù)存儲(chǔ)
這篇文章主要介紹了Android開(kāi)發(fā)教程之ContentProvider數(shù)據(jù)存儲(chǔ)的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android下拉刷新控件PullToRefresh實(shí)例解析
這篇文章主要為大家詳細(xì)解析了Android下拉刷新控件PullToRefresh實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Flutter如何輕松實(shí)現(xiàn)動(dòng)態(tài)更新ListView淺析
在Android中通常都會(huì)用到listview.那么flutter里面怎么用呢?下面這篇文章主要給大家介紹了關(guān)于Flutter如何輕松實(shí)現(xiàn)動(dòng)態(tài)更新ListView的相關(guān)資料,需要的朋友可以參考下2022-02-02
Android 實(shí)現(xiàn)將Bitmap 保存到本地
這篇文章主要介紹了Android 實(shí)現(xiàn)將Bitmap 保存到本地,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
詳解Android中Handler的實(shí)現(xiàn)原理
這篇文章主要為大家詳細(xì)介紹了Android中Handler的實(shí)現(xiàn)原理,本文深入分析 Android 的消息處理機(jī)制,了解 Handler 的工作原理,感興趣的小伙伴們可以參考一下2016-04-04

