編輯:關於Android編程
本文實例講述了Android實現長按back鍵退出應用程序的方法。分享給大家供大家參考。具體分析如下:
最近在做一個Android上的應用,碰到一個問題就是如何實現長按back鍵退出應用程序。在網上查找了很多資料,發現幾乎沒有這樣的實現,大部分在處理時是雙擊back鍵來退出應用程序。參考了一下雙擊back鍵退出應用程序的代碼,網上主流的一種方法是下面這種方法,實現起來比較簡單:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - mExitTime) > 2000) { mHelperUtils.showToast(mContext, R.string.exit_content); mExitTime = System.currentTimeMillis(); } else { finish(); } return true; } return super.onKeyDown(keyCode, event); }
從上面的代碼可以看出,采用的思路就是連續兩次點擊back鍵的時間間隔在2s以內,則認為是雙擊,從而退出程序。
因此,借鑒上面的思路,我的最初想法是:可以重寫onKeyDown方法和onKeyUp方法,計算這執行這兩個方法之間的時間間隔,如果大於2s,則認為是長按,從而退出程序;否則,則執行back鍵原有的響應。按照這個思路:
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0) { start=System.currentTimeMillis(); Log.e("start",String.valueOf(start)); return false; } return super.onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK &&event.getRepeatCount()==0) { end=System.currentTimeMillis(); Log.e("end",String.valueOf(end)); if(start!=-1&&(end-start)>2000) { AlertDialog.Builder builder = new Builder(MainActivity.this); builder.setMessage("確認退出嗎?"); builder.setTitle("提示"); builder.setPositiveButton("確認",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); MainActivity.this.finish(); System.exit(0); } }); builder.setNegativeButton("取消",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); } }); builder.create().show(); return true; } else { return super.onKeyUp(keyCode, event); } } return super.onKeyUp(keyCode, event); }
然而,這樣能夠實現長按back鍵退出程序,但是非長按back鍵的時候,點擊back則失效了,查找了很多Android 按鍵事件分發和處理機制方面的資料,還是沒弄清楚原因(後面有時間再研究)。於是考慮換一種思路去處理,考慮去重寫Activity中的dispatchKeyEvent方法。
public boolean dispatchKeyEvent(KeyEvent event) { int keyCode=event.getKeyCode(); //Log.e("start",String.valueOf(start)); switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(event.isLongPress()) //這句很重要,判斷事件是否是長按事件 { AlertDialog.Builder builder = new Builder(MainActivity.this); builder.setMessage("確認退出嗎?"); builder.setTitle("提示"); builder.setPositiveButton("確認",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); MainActivity.this.finish(); System.exit(0); } }); builder.setNegativeButton("取消",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); } }); builder.create().show(); return true; } return super.dispatchKeyEvent(event); //如果不是長按,則調用原有方法,執行按下back鍵應有的處理 default: break; } return super.dispatchKeyEvent(event); }
最後通過重寫dispatchKeyEvent方法實現了長按back鍵退出程序,而且沒有屏蔽掉原有的非長按back鍵功能。
希望本文所述對大家的Android程序設計有所幫助。
近期小米公司推出一款電子產品——《小米錢包》想必大家都有所耳聞吧。不過小編也在網上看到很多網友表示錢包內資金具體提現方法不是很熟悉,
添加權限 首先要在manifest中加上訪問網絡的權限: 復制代碼 代碼如下: <manifest ... > <uses-permission and
本文實例講述了Android編程實現監聽EditText變化的方法。分享給大家供大家參考,具體如下:監聽EditText中的內容的變化。在EditText沒有找到一個se
View的Draw時序圖前面幾篇通過對View樹的measure和layout過程分析事,接下來將結合前兩步得到的測量值及在視圖中的位位置,開始進行繪制操作,一步比一步復