Sencha Touch 程序设计之 Android 平台 Back 按键处理

来源:互联网 发布:怎么看淘宝卖家电话 编辑:程序博客网 时间:2024/06/05 19:16

Sencha Touch 程序设计之 Android 平台 Back 按键处理

利用 Sencha Touch 结合PhoneGap设计本地APP,免不了要分别处理android平台和iphone平台,两个平台的最大区别之一就是back键的处理。iphone平台没有back按键,只有home按键,按下该键的话程序会自动转入后台处理,该按键的效用等同于android平台的home按键,但是,android平台特殊的地方在于,它还有一个back键,熟悉了android平台的开发者或使用者,把该键的作用理解为退回程序的上一个页面,如果程序已经在主页面,此时则退出程序。

因为Sencha Touch对android平台进行了消息封装,默认对back键的处理,同home键的处理一致,这令很多android开发者或使用者使用其功能的话不太友好,我自己在调试程序的过程中就误操作过了N次,每次按下back键期望程序回退到上一个页面,没想到程序直接消失了,转到后台去了。

网上搜索了一些解决方案,各有利弊,汇总贴可参照Sencha Touch官方论坛《Why-can-t-I-control-Android-phone-s-hardware-Back-button-in-Sencha-with-PhoneGap》,下面介绍一下我设计的一个解决方案,在实测环境中工作良好,总结如下:

1. 首先在Sencha 启动代码中捕获android平台的back按键消息,阻止Sencha 框架的默认处理

12345678910111213141516171819202122232425262728293031
var App = new Ext.application({ // ... APP 配置参数  launch : function () {  // ... 界面初始化   BBGlobalData.mainPanel = Ext.create('Ext.Panel', {       fullscreen: true,       layout : 'card',       cardAnimation : 'slide',       items: [           Ext.create('BBShow.view.LoginPanel'),           Ext.create('BBShow.view.HomePanel'),           Ext.create('BBShow.view.MediaPanel'),           Ext.create('BBShow.view.PicCarousel'),           Ext.create('BBShow.view.ReportListPanel'),           Ext.create('BBShow.view.ReportPanel'),       ]   });    Ext.Viewport.add(BBGlobalData.mainPanel);    document.addEventListener('deviceready', function () {     console.log('deviceready');     document.addEventListener("backbutton", function () {           console.log('user presses the back button on Android');           // 获取当前的焦点页面,并发送自定义消息'back'           BBGlobalData.mainPanel.getActiveItem().fireEvent('back');    }, false);  }, false);}})

2. 在子页面中注册back消息的监听器

1234567891011121314151617181920212223242526
/*定义登录面板*/Ext.define('BBShow.view.LoginPanel', {extend: 'Ext.Panel',     config: {      items: [      {        xtype: 'titlebar',        docked: 'top',        title: '用户登录'      },      // 其他页面内容     ],    listeners: [     {      fn: 'onBack',      event: 'back', //注册监听自定义back按键消息     }    ]  },   onBack: function() {    //BBGlobalData.gotoHomePanel(); //如,跳转到其他页面    BBGlobalData.exitApp(); //或退出程序  },});

3. 实现退出程序的处理,借助于PhoneGap

123
   BBGlobalData.exitApp = function() {   navigator.app.exitApp();}

4. 实现页面跳转的处理(主页面采用card view,类似于扑克的翻牌)

123
BBGlobalData.gotoHomePanel = function() {   BBGlobalData.mainPanel.setActiveItem(1);}

原创粉丝点击