最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序的方法

 更新時(shí)間:2015年05月28日 09:59:53   作者:海 子  
這篇文章主要介紹了Android實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序的方法,實(shí)例分析了Android按鈕事件的操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Android實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序的方法。分享給大家供大家參考。具體分析如下:

最近在做一個(gè)Android上的應(yīng)用,碰到一個(gè)問(wèn)題就是如何實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序。在網(wǎng)上查找了很多資料,發(fā)現(xiàn)幾乎沒(méi)有這樣的實(shí)現(xiàn),大部分在處理時(shí)是雙擊back鍵來(lái)退出應(yīng)用程序。參考了一下雙擊back鍵退出應(yīng)用程序的代碼,網(wǎng)上主流的一種方法是下面這種方法,實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單:

@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);
}

從上面的代碼可以看出,采用的思路就是連續(xù)兩次點(diǎn)擊back鍵的時(shí)間間隔在2s以內(nèi),則認(rèn)為是雙擊,從而退出程序。

因此,借鑒上面的思路,我的最初想法是:可以重寫onKeyDown方法和onKeyUp方法,計(jì)算這執(zhí)行這兩個(gè)方法之間的時(shí)間間隔,如果大于2s,則認(rèn)為是長(zhǎng)按,從而退出程序;否則,則執(zhí)行back鍵原有的響應(yīng)。按照這個(gè)思路:

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("確認(rèn)退出嗎?");
  builder.setTitle("提示");
  builder.setPositiveButton("確認(rèn)",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);
}

然而,這樣能夠?qū)崿F(xiàn)長(zhǎng)按back鍵退出程序,但是非長(zhǎng)按back鍵的時(shí)候,點(diǎn)擊back則失效了,查找了很多Android 按鍵事件分發(fā)和處理機(jī)制方面的資料,還是沒(méi)弄清楚原因(后面有時(shí)間再研究)。于是考慮換一種思路去處理,考慮去重寫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())
  //這句很重要,判斷事件是否是長(zhǎng)按事件
  {
  AlertDialog.Builder builder = new Builder(MainActivity.this);
  builder.setMessage("確認(rèn)退出嗎?");
  builder.setTitle("提示");
  builder.setPositiveButton("確認(rèn)",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);
  //如果不是長(zhǎng)按,則調(diào)用原有方法,執(zhí)行按下back鍵應(yīng)有的處理
  default:
  break;
 }
 return super.dispatchKeyEvent(event);
}

最后通過(guò)重寫dispatchKeyEvent方法實(shí)現(xiàn)了長(zhǎng)按back鍵退出程序,而且沒(méi)有屏蔽掉原有的非長(zhǎng)按back鍵功能。

希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android避免內(nèi)存抖動(dòng)的解決方案

    Android避免內(nèi)存抖動(dòng)的解決方案

    避免內(nèi)存抖動(dòng)就像  “少扔垃圾,少讓清潔工(GC)跑斷腿”  —— 減少臨時(shí)對(duì)象的產(chǎn)生,復(fù)用已有資源,讓應(yīng)用流暢如絲,本文給大家說(shuō)透Android里面的如何避免內(nèi)存抖動(dòng),需要的朋友可以參考下
    2025-02-02
  • android顯示TextView文字的倒影效果實(shí)現(xiàn)代碼

    android顯示TextView文字的倒影效果實(shí)現(xiàn)代碼

    這篇文章主要介紹了android顯示TextView文字的倒影效果實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-02-02
  • AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    這篇文章主要介紹了AndroidQ(10)黑暗模式適配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Android自定義View的三種實(shí)現(xiàn)方式總結(jié)

    Android自定義View的三種實(shí)現(xiàn)方式總結(jié)

    本篇文章主要介紹了Android自定義View的三種實(shí)現(xiàn)方式總結(jié),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-02-02
  • Android播放音樂(lè)案例分享

    Android播放音樂(lè)案例分享

    這篇文章主要為大家分享了Android播放音樂(lè)案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android記事本項(xiàng)目開發(fā)

    Android記事本項(xiàng)目開發(fā)

    這篇文章主要為大家詳細(xì)介紹了Android記事本項(xiàng)目開發(fā)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android?Studio實(shí)現(xiàn)彈窗設(shè)置

    Android?Studio實(shí)現(xiàn)彈窗設(shè)置

    這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)彈窗設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android Studio如何獲取SQLite數(shù)據(jù)并顯示到ListView上

    Android Studio如何獲取SQLite數(shù)據(jù)并顯示到ListView上

    這篇文章主要介紹了Android Studio獲取SQLite數(shù)據(jù)并顯示到ListView上,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Android編程實(shí)現(xiàn)切換imageView的方法分析

    Android編程實(shí)現(xiàn)切換imageView的方法分析

    這篇文章主要介紹了Android編程實(shí)現(xiàn)切換imageView的方法,結(jié)合具體實(shí)例形式分析了切換imageView的相關(guān)設(shè)置技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Android Fragment多層嵌套重影問(wèn)題的解決方法

    Android Fragment多層嵌套重影問(wèn)題的解決方法

    這篇文章主要介紹了Android Fragment多層嵌套重影問(wèn)題的解決方法,從解決bug的思想,導(dǎo)致原因,原理解析等方面找出問(wèn)題所在原因,最終解決方法就可以簡(jiǎn)單了,對(duì)fragment 多層嵌套問(wèn)題感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧
    2016-08-08

最新評(píng)論

邹城市| 双鸭山市| 新化县| 鲁山县| 临夏市| 临清市| 永仁县| 庐江县| 绥江县| 洛扎县| 侯马市| 泰兴市| 安岳县| 东兴市| 喜德县| 日土县| 龙里县| 凤冈县| 江北区| 临澧县| 乐山市| 仁布县| 雷山县| 邛崃市| 山东省| 金山区| 金秀| 库伦旗| 普安县| 崇仁县| 伊春市| 新闻| 德格县| 安庆市| 喀喇沁旗| 河西区| 茂名市| 富裕县| 昌江| 新余市| 赫章县|