Nova PhoneGap框架 第七章 设备事件处理
我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码。这些事件包括:回退键(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框架 第七章 设备事件处理的更多相关文章
- Nova PhoneGap框架 第四章 本地数据库
我一直想把EntityFramework(简称EF)的那一套搬过来,应用于HTML5 SQLite. 幸运的是,我几乎做到了,有些功能无法完成的那是因为SQLite本身不支持.至少从现在已经完成的功能 ...
- Nova PhoneGap框架 第六章 使用Mock
在我们的框架中引入了一个很重要的设计,那就是使用Mock. 这里的mock是指cordova.mock.js文件,它模拟了PhoneGap(Cordova)的API,从而可以在浏览器中运行测试我们的程 ...
- Nova PhoneGap框架 第三章 页面
页面在项目架构中是一个很重要的概念,它让我们能够将一个功能复杂的项目拆分成一个一个功能比较独立的小区域,这极大的提高了代码的可读性和可维护性. 在我们这个框架中,一个页面由JS和HTML两部分组成,首 ...
- Nova PhoneGap框架 第五章 文件结构
一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- Nova PhoneGap框架 第八章 滚动条
你可能会疑惑为什么滚动条这么常见的功能会在这里单独列出,但如果你有过PhoneGap开发经验的话,你就会发现要在Android 2.3 里面实现滚动条那真不是一件容易的事. 8.1 概述 目前主流的P ...
- Nova PhoneGap框架 总结
Nova PhoneGap Framework 是完全针对PhoneGap应用程序量身定做的,在这个框架下开发的应用程序很容易实现高质量的代码,很容易让程序拥有很好的性能和用户体验. 在经历了多个项目 ...
- Nova PhoneGap框架 第二章 理解index.html
跟绝大多数PhoneGap程序一样,Index.html是程序的入口.这个页面应该完成应用程序的初始化工作. 首先,让我们来看看这个页面通常都长什么样子: 下面我将一一解释这个页面都做了哪些初始化工作 ...
- Nova PhoneGap框架 第九章 控件
我们的框架中也提供了一些常用的控件,这些控件大多都依赖于我们的框架,也正是在我们的框架下才使得实现这些控件的变得更简单.但是我们的框架是不依赖与这些控件的,如果你用不上这些控件,你完全可以把相关的代码 ...
随机推荐
- 数据分析(9):DataFrame介绍
DataFrame 表格型的数据结构 创建DataFrame 可以通过传入dict的方式,DataFrame会自动加上索引,并且列会有序排列 data = {'state':['a', 'b', 'c ...
- string与int互换
1:将string转化为int 1.) int i = Integer.parseInt(String s); 2.) int i = Integer.valueOf(my_str).intValue ...
- 函数式编程之柯里化(curry)
函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. var add = function(x) { return function(y) { retur ...
- WebGL入门教程(五)-webgl纹理
前面文章: WebGL入门教程(一)-初识webgl WebGL入门教程(二)-webgl绘制三角形 WebGL入门教程(三)-webgl动画 WebGL入门教程(四)-webgl颜色 这里就需要用到 ...
- Maven的配置和使用(三)
下面记录下如何使用Maven进行jar包的管理和更新. 在Maven中我们是通过对pom.xml文件的配置来对项目的包进行管理的,找到该文件并打开: <project xmlns="h ...
- python 爬虫(二)
python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...
- 深入理解JavaScript运行机制
深入理解JavaScript运行机制 前言 本文是写作在给团队新人培训之际,所以其实本文的受众是对JavaScript的运行机制不了解或了解起来有困难的小伙伴.也就是说,其实真正的原理和本文阐述的并不 ...
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- android studio安卓项目出现Error: Default Activity Not Found错误无法编译的解决方案
项目明明是没有问题的,有时候突然就出现Error: Default Activity Not Found错误,以前出现过我重新安装了android studio 都没有用,后来在网上(http://s ...
- python lxml install
之前记得安装libxslt和libxml yum install libxml* -yyum install libxslt* -y wget http://lxml.de/files/lxml-3. ...