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对象的宽和高并不是真实的值。