2018-10-19 Android長按鍵、短按鍵識(shí)別及處理

在做Android TV項(xiàng)目的過程中轩性,需要識(shí)別遙控器長按声登、短按來做不同的操作。
在網(wǎng)上查找,一般如下(傳送門):

在Android中已經(jīng)有了長按與短按的識(shí)別悯嗓,只是長按識(shí)別的時(shí)間比較短 件舵,大概在1s以上就認(rèn)為是長按了。主要的思路是設(shè)置一個(gè)標(biāo)志位脯厨,利用事件相應(yīng)次數(shù)函數(shù)event.getRepeatCount()來設(shè)置標(biāo)志位铅祸。主要用的函數(shù)是按鍵響應(yīng)的三個(gè)函數(shù) onKeyLongPress,onKeyDown和onKeyUp合武,具體代碼如下:

private boolean shortPress = false;
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        shortPress = false;
      //長按要執(zhí)行的代碼
        return true;
    }

    return false;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        if(event.getAction() == KeyEvent.ACTION_DOWN){
            event.startTracking(); //只有執(zhí)行了這行代碼才會(huì)調(diào)用onKeyLongPress
            if(event.getRepeatCount() == 0){
                shortPress = true;
            }
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        if(shortPress){
            //短按要執(zhí)行的代碼
        } 
        shortPress = false;
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

按照上述方法临梗,需要在onKeyUp中處理短按鍵(一般onKeyDown時(shí)就處理了),但是由于我在包含F(xiàn)ragment的activity中稼跳,處理邏輯不在activity內(nèi)盟庞,且Fragment沒有 onKeyLongPress,onKeyDown和onKeyUp等函數(shù)汤善,很難實(shí)現(xiàn)對(duì)Fragment中具體焦點(diǎn)的處理什猖,所以此方法暫時(shí)行不通。


經(jīng)過摸索萎津,發(fā)現(xiàn)不需要使用onKeyLongPress卸伞,直接在onKeyDown中調(diào)用event.getRepeatCount()判斷是否大于0,如果大于0锉屈,則認(rèn)為是長按鍵荤傲,記錄標(biāo)志,然后再onKeyUp中處理長按鍵即可颈渊,(長按按鍵鍵時(shí)第1次onKeydown 500ms遂黍,第2次500ms,第3次及之后沒50ms發(fā)送一次onKeydown):
代碼如下:
···
private boolean isLongPressKey;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_UP:
            if (event.getRepeatCount() != 0) {
                Log.i(TAG, "onKeyDown: long press key");
                isLongPressKey = true;
                return true;
            }
            break;
        default:
            break;
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_UP:
            if (isLongPressKey) {
                Log.i(TAG, "onKeyUp: long");
                // 長按鍵的處理邏輯
                isLongPressKey = false;
                return true;
            }
            break;
        default:
            break;
    }

    return super.onKeyUp(keyCode, event);
}

···
這樣做了之后俊嗽,有一個(gè)問題雾家,長按必須放開后,才響應(yīng)動(dòng)作绍豁,這樣在體驗(yàn)上不是很好芯咧,但目前未想到解決辦法,待后續(xù)研究竹揍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敬飒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芬位,更是在濱河造成了極大的恐慌无拗,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧碉,死亡現(xiàn)場離奇詭異英染,居然都是意外死亡揽惹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門四康,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搪搏,“玉大人,你說我怎么就攤上這事箭养∧饺拢” “怎么了哥牍?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵毕泌,是天一觀的道長。 經(jīng)常有香客問我嗅辣,道長撼泛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任澡谭,我火速辦了婚禮愿题,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛙奖。我一直安慰自己潘酗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布雁仲。 她就那樣靜靜地躺著仔夺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攒砖。 梳的紋絲不亂的頭發(fā)上缸兔,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音吹艇,去河邊找鬼惰蜜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛受神,可吹牛的內(nèi)容都是我干的抛猖。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鼻听,長吁一口氣:“原來是場噩夢啊……” “哼财著!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起精算,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤瓢宦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灰羽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驮履,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鱼辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玫镐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒戏。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恐似,靈堂內(nèi)的尸體忽然破棺而出杜跷,到底是詐尸還是另有隱情,我是刑警寧澤矫夷,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布葛闷,位于F島的核電站,受9級(jí)特大地震影響双藕,放射性物質(zhì)發(fā)生泄漏淑趾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一忧陪、第九天 我趴在偏房一處隱蔽的房頂上張望扣泊。 院中可真熱鬧,春花似錦嘶摊、人聲如沸延蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱飘。三九已至,卻和暖如春蹂空,著一層夾襖步出監(jiān)牢的瞬間俯萌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工上枕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咐熙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓辨萍,卻偏偏與公主長得像棋恼,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锈玉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你爪飘,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,749評(píng)論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,312評(píng)論 25 707
  • 面試必背 會(huì)舍棄拉背、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過來的知識(shí)點(diǎn)匯總而來 建議根據(jù)我的寫的面試應(yīng)對(duì)思路中的...
    luoyangzk閱讀 6,760評(píng)論 6 173
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程师崎,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • 快上課了,我提前進(jìn)入教室椅棺,只見小馮同學(xué)站在講臺(tái)前犁罩,手在撥弄粉筆盒齐蔽。 我:小馮同學(xué),怎么啦床估? 馮:粉筆盒壞了含滴,我只是...
    飛飛老師Fy閱讀 508評(píng)論 0 0