我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码。这些事件包括:回退键(Android)和横竖屏切换事件。

7.1 Android回退键

首先来说说回退键的事件处理。当用户在Android设备上按下回退键时,用户可能会希望:

l  应用程序能返回到上一页;

l  取消正在执行的任务,比如正在下载或是提交数据;

l  移除提示消息;

l  或者更多。

我们的框架正好解决了这些问题,让自定义的回退键事件变得异常简单。这是那些基于URL实现页面跳转的框架所望尘莫及的,比如基于jQuery Mobile的程序就很难处理特殊的回退键事件。

我们的框架是怎么做到的呢?

在应用程序启动的时候,我们就给Android设备的回退键绑定了一个事件处理程序, 另外在nova.Page类有一个backbuttonHandlers数组,用于存储这个页面所绑定的回退键事件。当用于按下回退键的时候,首先会检查当前页面的backbuttonHandlers数组是否为空,如果为空,就默认跳到上一个页面(nova.application下有一个history数组),如果不为空,那么就取出最近加入这个数组的那一个函数然后执行。

当应用程序跳转到新的页面之后,新页面的backbuttonHandlers都是为空的。因此不管之前页面的回退键处理程序是否顺利执行,都不会影响到新的页面。这也就保证了应用程序的健壮性。

理解了原理之后,完成代码就变得非常简单了。假如某个页面有一个按钮,点击这个按钮弹出一个提示,用户可以按回退键消除提示,也可以点击提示框的OK键进行消除。相应的代码可能会像下面的这样:

7.2 横竖屏切换事件

在第二章中说了,我们的应用程序有一个特殊的div#body,在应用程序启动的时候,设置了固定的宽和高。那么当横竖屏切换的时候,这个div#body是不是应该要重新计算宽和高呢?是的,就是这样。

我们的框架已经处理了横竖屏切换的事件,并且在基类nova.Page中完成了div#body的宽和高的重新计算。但是,我们自定义的继承自nova.Page的页面通常都还有些固定宽或高的元素,那么这时就需要重新计算这些元素宽和高了。

nova.Page基类中有一个onOrientationChanged事件处理函数,你可以在派生类中覆写这个方法。这个方法带2个参数,width和height,即屏幕旋转之后的宽和高。如果你需要处理固定宽高的元素,那么你应该使用这2个参数,而不是计算window的宽和高。这是因为对于Android设备,屏幕的旋转事件是在旋转刚刚开始的时候就会触发的,而刚刚开始旋转的时候,window对象的宽和高并不是真实的值。

Nova PhoneGap框架 第七章 设备事件处理的更多相关文章

  1. Nova PhoneGap框架 第四章 本地数据库

    我一直想把EntityFramework(简称EF)的那一套搬过来,应用于HTML5 SQLite. 幸运的是,我几乎做到了,有些功能无法完成的那是因为SQLite本身不支持.至少从现在已经完成的功能 ...

  2. Nova PhoneGap框架 第六章 使用Mock

    在我们的框架中引入了一个很重要的设计,那就是使用Mock. 这里的mock是指cordova.mock.js文件,它模拟了PhoneGap(Cordova)的API,从而可以在浏览器中运行测试我们的程 ...

  3. Nova PhoneGap框架 第三章 页面

    页面在项目架构中是一个很重要的概念,它让我们能够将一个功能复杂的项目拆分成一个一个功能比较独立的小区域,这极大的提高了代码的可读性和可维护性. 在我们这个框架中,一个页面由JS和HTML两部分组成,首 ...

  4. Nova PhoneGap框架 第五章 文件结构

    一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...

  5. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  6. Nova PhoneGap框架 第八章 滚动条

    你可能会疑惑为什么滚动条这么常见的功能会在这里单独列出,但如果你有过PhoneGap开发经验的话,你就会发现要在Android 2.3 里面实现滚动条那真不是一件容易的事. 8.1 概述 目前主流的P ...

  7. Nova PhoneGap框架 总结

    Nova PhoneGap Framework 是完全针对PhoneGap应用程序量身定做的,在这个框架下开发的应用程序很容易实现高质量的代码,很容易让程序拥有很好的性能和用户体验. 在经历了多个项目 ...

  8. Nova PhoneGap框架 第二章 理解index.html

    跟绝大多数PhoneGap程序一样,Index.html是程序的入口.这个页面应该完成应用程序的初始化工作. 首先,让我们来看看这个页面通常都长什么样子: 下面我将一一解释这个页面都做了哪些初始化工作 ...

  9. Nova PhoneGap框架 第九章 控件

    我们的框架中也提供了一些常用的控件,这些控件大多都依赖于我们的框架,也正是在我们的框架下才使得实现这些控件的变得更简单.但是我们的框架是不依赖与这些控件的,如果你用不上这些控件,你完全可以把相关的代码 ...

随机推荐

  1. Android Studio中Button等控件的Text中字符串默认大写的解决方法

    初学Android的时候,在Android Studio中xml里面添加一个Button.EditText等控件后,它的Text总是会显示大写,即使你输入的字符串是小写也不行,控制字符串大小写的属性是 ...

  2. C#使用ListView更新数据出现闪烁解决办法

    C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候,更新里面的部分代码时候出现闪烁的情况 如图: 解决以后: 解决办法使用双缓冲:添加新类继承ListView ...

  3. strtok源码 bitset 空间压缩

    源代码里有一段: unsigned char map[32]; /* Clear control map */ for (count = 0; count < 32; count++) map[ ...

  4. linux中的环境变量

    linux中用到很多的环境变量的设置,这里推荐一个博客: http://www.cnblogs.com/mengyan/archive/2012/09/04/2669894.html

  5. Arduino uno LED灯实验

    http://jingyan.baidu.com/article/a65957f4e358d924e67f9bad.html

  6. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  7. BIAWGN信道

    想到这个问题是因为平时使用的香农公式是 C=0.5*log2(1+SNR),后面才发现香农公式针对的好像是输入时高斯分布的情况,这种情况下用互信息来推导也可以看到: \[\begin{array}{c ...

  8. oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列

      DML语句 insert 向表中插入新的记录   --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAM ...

  9. a 标签中加 onclick事件,根据事件中的校验情况来决定是否执行a标签的链接

    a 标签中加 onclick方法后,先执行onclick方法,在去执行a标签href下属性对应的动作,如果不想执行href属性下动作需要用false作为返回值. <a href="ht ...

  10. React,React Native中的es5和es6写法对照

    es6用在React中的写法总结: 在es6还没有完全支持到浏览器的阶段里,已经有很多技术人员开始用es6的写法来超前编程了,因为有转义es6语法的工具帮助下,大家才可大量使用.解析看看es6写法用在 ...