<font color=FF0000> LZ-Says:給大家推薦一個網(wǎng)站,有興趣可以查閱,想為大家貢獻(xiàn)一點自己的力量也可以投稿策橘,老大審核通過會發(fā)表沛婴,更好的幫助有需要的人歡迎大家踴躍投稿地址如下:
http://www.123si.org/android
去年真的浪費了好多的機會,,,而今年,卻找不到一個合適的機會,铺然,插勤,還是自己能力有所欠缺啊良哲。喇颁。。從一點點開始積累吧。原环。滔驾。那個誰,耻蛇,亡哄,這次截型,我會很自信站在你面前!!!
記得去年曾經(jīng)讓LZ寫一個連續(xù)點擊返回鍵倆次退出程序,,,憋了好久沒憋出來。刀闷。。23333雌隅。。。
下面先說說LZ思路,具體如下:
- 第一種就是根據(jù)用戶點擊倆次的時間間隔去判斷是否退出程序;
- 第二種就是使用android中計時器(Timer)美尸,其實這倆種都差不多.
思路是有了袱箱,,男杈,接下來要怎么開搞呢伶棒?鞭达??用戶點擊肯定會觸發(fā)相應(yīng)的事件,糊闽,念链,我們先來看下面?zhèn)z個事件的作用。。。
Activity.onKeyDown();
當(dāng)某個鍵被按下時會觸發(fā)亮靴,但不會被任何的該Activity內(nèi)的任何view處理。
默認(rèn)按下KEYCODE_BACK鍵后會回到上一個Activity搓侄。Activity.onKeyUp():
當(dāng)某個按鍵被按下瞄桨,松開后觸發(fā),但不會被任何的該Activity內(nèi)的任何view處理讶踪。
默認(rèn)沒有執(zhí)行任何操作芯侥,只是簡單的給一個false作為返回值。
So乳讥,柱查,,接下來分別使用如上倆個方法干掉這個當(dāng)年的攔路虎~
One Way:onKeyUp()
//--------------使用onKeyUp()干掉他--------------
//記錄用戶首次點擊返回鍵的時間
private long firstTime=0;
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_BACK:
long secondTime=System.currentTimeMillis();
if(secondTime-firstTime>2000){
Toast.makeText(MainActivity.this,"再按一次退出程序--->onKeyUp",Toast.LENGTH_SHORT).show();
firstTime=secondTime;
return true;
}else{
System.exit(0);
}
break;
}
return super.onKeyUp(keyCode, event);
}
Two Way:onKeyDown()
//--------------使用onKeyDown()干掉他--------------
//記錄用戶首次點擊返回鍵的時間
private long firstTime=0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){
if (System.currentTimeMillis()-firstTime>2000){
Toast.makeText(MainActivity.this,"再按一次退出程序--->onKeyDown",Toast.LENGTH_SHORT).show();
firstTime=System.currentTimeMillis();
}else{
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
Three Way:Timer
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
exitByDoubleClick();
}
return false;
}
private void exitByDoubleClick() {
Timer tExit=null;
if(!isExit){
isExit=true;
Toast.makeText(MainActivity.this,"再按一次退出程序--->Timer",Toast.LENGTH_SHORT).show();
tExit=new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit=false;//取消退出
}
},2000);// 如果2秒鐘內(nèi)沒有按下返回鍵云石,則啟動定時器取消掉剛才執(zhí)行的任務(wù)
}else{
finish();
System.exit(0);
}
}
OK唉工,,留晚,LZ介紹完三種寫法酵紫,,错维,有好一點的寫法可以告訴我哦~
2017年7月6日00:14:59更新:
聽到一個哥兒們提供了一種思路奖地,大家有興趣可以實踐下:
重寫onkeydown 在里面利用handle的延時發(fā)送來實現(xiàn) showToast(“確定要退出?xxx歡迎您下次再來”);
// 利用handler延遲發(fā)送更改狀態(tài)信息 handler.sendEmptyMessageDelayed(0, 2000);