10 October 2011
在Adobe AIR的应用程序中,当一个指定的活动发生时,一个事件就会被调用。例如, 当你按下或松开键盘上的一个按键时,Adobe AIR就会生成一个keyboard事件。每一个键都会被指定一个单一的key code。Adobe AIR将这种支持扩展到移动设备上所使用的软键盘,如:Back, Menu, 和 Search。
在这片文章里,你将学习如何处理软键事件(soft key events)。
当你点中任何一个软键时,NativeApplication对象就会调用键盘事件:KeyboardEvent.KEY_DOWN。 当你松开软键时,NativeApplication就会调用事件:KeyboardEvent.KEY_UP。当你开发一个应用程序时,你可以处理这些事件,并给出针对这些键的相应的行为。
举个例子,假设你在一个手机应用程序中有大量的记录。当你按下Back键,你想看记录中前面的一部分。在默认情况下,当你在一个Android设备上按下 Back键时,当前的Adobe AIR应用程序就会跑到后台,手机会激活前一个活动的应用程序。处理由于点击Back键而产生的键盘事件会使你能够阻止这种默认行为,通过编程使得应用程序按照你的思路进行。
注意: 当你想取消BACK键所产生的默认行为时,你必须处理KeyDown事件。KeyUP事件在事件链中发生的太晚了。
你可以在NativeApplication对象上监听键盘事件。使用下面的表述来为code>keyDown 事件添加一个监听器:
NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN,checkKeypress);
在下面的例子中,checkKeypress函数描述了 你是如何测试被调用的KeyboardEvent对象来确定哪个键被按了。这个函数用了一个switch表达式,来为被按的软键提供指定行为。其他的按键则被忽略。
public function CheckKeypress(event:KeyboardEvent):void
{
switch (event.keyCode)
{
case Keyboard.BACK:
event.preventDefault();
trace("Back key is pressed.");
break;
case Keyboard.MENU:
trace("Menu key is pressed.");
break;
case Keyboard.SEARCH:
trace("Search key is pressed.");
break;
}
}
当设计你的应用程序时,有件事非常重要,那就是处理软键的方法要与平台上本地应用程序的处理方法保持一致。否则,当你的应用程序表现的与用户期待的不一样时,他们会很沮丧。例如,在Android平台上,Back键用来返回到该应用程序的前一个视窗(view),直到你回到初始的那个视窗。在这个初始视窗上,再一次按Back键会关闭当前的应用程序并激活前一个应用程序,或者回到手机的主屏。在一个Adobe AIR应用程序里,你必须跟踪应用程序的状态,目的是模拟本机行为。如果你不做任何事,那么Back键将会关闭你的应用程序,不论它在何种状态或者视窗里。
当Home键被按下时,没有任何键盘事件被调用。你的应用程序会被关闭,而这是不能被阻止的。然而,NativeApplication对象确实是调用了一个关闭事件。在这个关闭事件的处理程序中,你应该采取以下措施来保存电量,并为可能的终止做准备:
注意:AIR会自动减缓后台应用程序的帧频率到每秒四帧。如果你的应用程序不需要持续的网络链接时,你可以将帧频设置为.01来更多的节省电量。
要恢复一个应用程序,你可以使用激活事件(activate event)或者 唤醒事件(invoke event)。一个激活事件(activate event)会被调用的条件是:当你的应用程序从后台跑到前台时,而不是当你的应用程序被初始化加载时。一个唤醒事件(invoke event)被调用的条件是:当你的应用程序被放到前台,而且还可以是当它被初始化加载时。
在这篇文章中,你学习了如何处理软键事件。更多的信息,请参考在线文档Basics of handlingevents。