ionic2實戰(zhàn)-完美處理安卓硬件返回按鈕

效果演示

源代碼已上傳到github

由于ionic版本更新較快,有些寫法可能改變來不及更新簡書,請以github代碼為準(zhǔn)

ionic2-完美處理安卓硬件返回按鈕.gif

介紹

  • 注冊安卓硬件返回按鈕事件是必須的,因為用戶不小心點擊了返回按鈕就退出app體驗很不好. 所以當(dāng)用戶點擊返回按鈕,應(yīng)該提示"再按一次退出"

  • 不想實現(xiàn)"再按一次退出",想實現(xiàn)像QQ一樣按返回最小化app?可以看這里

  • ionic2更新比較快,Google找到的許多處理方法都是舊版本,下面就貼出package.json完整代碼,截至目前是最新的
    {
    "name": "ionic-app-base",
    "author": "Ionic Framework",
    "homepage": "http://ionicframework.com/",
    "private": true,
    "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
    },
    "dependencies": {
    "@angular/common": "2.2.1",
    "@angular/compiler": "2.2.1",
    "@angular/compiler-cli": "2.2.1",
    "@angular/core": "2.2.1",
    "@angular/forms": "2.2.1",
    "@angular/http": "2.2.1",
    "@angular/platform-browser": "2.2.1",
    "@angular/platform-browser-dynamic": "2.2.1",
    "@angular/platform-server": "2.2.1",
    "@ionic/storage": "1.1.7",
    "ionic-angular": "2.0.0-rc.4",
    "ionic-native": "2.2.11",
    "ionicons": "3.0.0",
    "rxjs": "5.0.0-beta.12",
    "zone.js": "0.6.26"
    },
    "devDependencies": {
    "@ionic/app-scripts": "0.0.47",
    "typescript": "2.0.9"
    }
    }

  • 今天(2017年3月17日 10:12:31)升級到最新版本,代碼不變,依然可以用,特此說明


核心代碼

核心代碼就4個文件,這4個文件中的完整代碼如下

  1. app.html,添加#myNav,在app.component.ts文件通過@ViewChild('myNav')獲取
    <ion-nav #myNav [root]="rootPage"></ion-nav>
  • app.component.ts

     import {Component, ViewChild} from '@angular/core';
     import {Platform, ToastController, Nav, IonicApp} from 'ionic-angular';
     import {StatusBar, Splashscreen} from 'ionic-native';
     import {TabsPage} from '../pages/tabs/tabs';
    
     @Component({
       templateUrl: 'app.html'
     })
     export class MyApp {
       rootPage = TabsPage;
       backButtonPressed: boolean = false;  //用于判斷返回鍵是否觸發(fā)
       @ViewChild('myNav') nav: Nav;
    
       constructor(public ionicApp: IonicApp, public platform: Platform, public toastCtrl: ToastController) {
         platform.ready().then(() => {
           StatusBar.styleDefault();
           Splashscreen.hide();
           this.registerBackButtonAction();//注冊返回按鍵事件
         });
       }
    
       registerBackButtonAction() {
         this.platform.registerBackButtonAction(() => {
           //如果想點擊返回按鈕隱藏toast或loading或Overlay就把下面加上
           // this.ionicApp._toastPortal.getActive() || this.ionicApp._loadingPortal.getActive() || this.ionicApp._overlayPortal.getActive()
           let activePortal = this.ionicApp._modalPortal.getActive();
           if (activePortal) {
             activePortal.dismiss().catch(() => {});
             activePortal.onDidDismiss(() => {});
             return;
           }
           let activeVC = this.nav.getActive();
           let tabs = activeVC.instance.tabs;
           let activeNav = tabs.getSelected();
           return activeNav.canGoBack() ? activeNav.pop() : this.showExit()
         }, 1);
       }
    
       //雙擊退出提示框
       showExit() {
         if (this.backButtonPressed) { //當(dāng)觸發(fā)標(biāo)志為true時仇哆,即2秒內(nèi)雙擊返回按鍵則退出APP
           this.platform.exitApp();
         } else {
           this.toastCtrl.create({
             message: '再按一次退出應(yīng)用',
             duration: 2000,
             position: 'top'
           }).present();
           this.backButtonPressed = true;
           setTimeout(() => this.backButtonPressed = false, 2000);//2秒內(nèi)沒有再次點擊返回則將觸發(fā)標(biāo)志標(biāo)記為false
         }
       }
    

    }

  • tabs.html,添加#mainTabs,在tabs.ts文件通過@ViewChild('mainTabs') tabs:Tabs;獲取
    <ion-tabs #mainTabs>
    <ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="home"></ion-tab>
    <ion-tab [root]="tab2Root" tabTitle="About" tabIcon="information-circle"></ion-tab>
    <ion-tab [root]="tab3Root" tabTitle="Contact" tabIcon="contacts"></ion-tab>
    </ion-tabs>

  • tabs.ts
    import {Component, ViewChild} from '@angular/core';
    import { HomePage } from '../home/home';
    import { AboutPage } from '../about/about';
    import { ContactPage } from '../contact/contact';
    import {Tabs} from "ionic-angular";

     @Component({
       templateUrl: 'tabs.html'
     })
     export class TabsPage {
       @ViewChild('mainTabs') tabs:Tabs;
       tab1Root: any = HomePage;
       tab2Root: any = AboutPage;
       tab3Root: any = ContactPage;
     
       constructor() {
       }
     }
    

今天(2017年3月21日 22:34:42)添加隱藏鍵盤事件


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖颂碧,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡软驰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門心肪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锭亏,“玉大人,你說我怎么就攤上這事硬鞍』哿觯” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵固该,是天一觀的道長锅减。 經(jīng)常有香客問我,道長伐坏,這世上最難降的妖魔是什么怔匣? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮桦沉,結(jié)果婚禮上每瞒,老公的妹妹穿的比我還像新娘。我一直安慰自己纯露,他們只是感情好剿骨,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苔埋,像睡著了一般懦砂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天荞膘,我揣著相機與錄音罚随,去河邊找鬼。 笑死羽资,一個胖子當(dāng)著我的面吹牛淘菩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屠升,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼潮改,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腹暖?” 一聲冷哼從身側(cè)響起汇在,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脏答,沒想到半個月后糕殉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡殖告,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年阿蝶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黄绩。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡羡洁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爽丹,到底是詐尸還是另有隱情筑煮,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布习劫,位于F島的核電站咆瘟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诽里。R本人自食惡果不足惜袒餐,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谤狡。 院中可真熱鬧灸眼,春花似錦、人聲如沸墓懂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捕仔。三九已至匕积,卻和暖如春盈罐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闪唆。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工盅粪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悄蕾。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓票顾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帆调。 傳聞我的和親對象是個殘疾皇子奠骄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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

  • 本示例是ionic3.3,用了懶加載 在app.html中,添加#myNav番刊,在app.component.ts文...
    YuRi_1閱讀 2,776評論 1 6
  • 完成Ionic安裝后含鳞,你可以創(chuàng)建第一個App了。本章內(nèi)容將指導(dǎo)你新建一個App撵枢,添加一個頁面民晒,并且實現(xiàn)頁面間的導(dǎo)航...
    全棧弄潮兒閱讀 469評論 0 2
  • 如今算來精居,從開始工作到現(xiàn)在已經(jīng)有4年了锄禽,如果算上兼職,工作的年限可以延伸到8年之久靴姿。摩羯座這個星座還是比較熱愛工作...
    Commonsense閱讀 964評論 0 1
  • 1.IP電商沃但。微博是圖文短視頻消費平臺,京東天貓是貨消費平臺佛吓,而事實是這兩種平臺的界限正在急劇模糊宵晚,淘寶這兩三年很...
    海貍叔叔閱讀 242評論 0 1
  • 如果現(xiàn)在你告訴我默默喜歡了一個人好久,我會贊嘆你牛逼呀维雇,然后罵你個sb淤刃,去追呀!這大好的青春是要用經(jīng)歷來填滿的吱型,而...
    ZXRLEMON閱讀 491評論 5 6