我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码。这些事件包括:回退键(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. JS监听输入框值变化兼容 onpropertychange、oninput

    onpropertychange 属IE oninput 属除IE外(Chrome.Firefox.SS) 所以肯简单的办法嘛: 1. 一个input里面写两个属性事件 2.写在JS中判断浏览器添加监 ...

  2. 【Java EE 学习 70 上】【数据采集系统第二天】【数据加密处理】【登陆验证】【登陆拦截器】【新建调查】【查询调查】

    一.数据加密处理 这里使用MD5加密处理,使用java中自带加密工具类MessageDigest. 该类有一个方法digest,该方法输入参数是一个字符串返回值是一个长度为16的字节数组.最关键的是需 ...

  3. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  4. OpenMesh 将默认的 float 类型改为 double 类型

    OpenMesh 中默认的数据类型都是 float 类型的,如果要将其默认的 float 类型改为 double 类型,可以这么做: #include <OpenMesh/Core/Mesh/P ...

  5. Express URL跳转(重定向)的实现

    Express URL跳转(重定向)的实现   Express是一个基于Node.js实现的Web框架,其响应HTTP请求的response对象中有两个用于URL跳转方法res.location()和 ...

  6. 【原创】内核ShellCode注入的一种方法

    标 题: [原创]内核ShellCode注入的一种方法 作 者: organic 时 间: 2013-05-04,04:34:08 链 接: http://bbs.pediy.com/showthre ...

  7. CGI与fastcgi与php-fpm与php-cgi的关系

    cgi是一个协议,它规定了服务器Nginx会将那些数据传送给PHP-cgi fastcgi也可以说是一个协议.fastcgi是对cgi的性能的一次提高.fastcgi会先启动一个master,解析配置 ...

  8. WooCommerce

    http://devework.com/woocommerce.html https://woocommerce.com/ https://woocommerce.com/product-catego ...

  9. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

  10. C#开发中常用方法2------json转DataTable

    /// <summary>/// 将json转换为DataTable/// </summary>/// <param name="strJson"&g ...