在Flex手机应用中使用PopUpManager创建Alert窗口

Flex手机应用中没有Alert组件。今天在Flex Developer Center看到一篇文章:http://www.adobe.com/devnet/flex/articles/flex-mobile-development-tips-tricks-pt4.html,觉得用SkinnablePopUpContainer来弹出Alert窗口确实简单,但这种做法太过简单了,不能重用代码,旋转手机时Alert窗口不能重新居中,于是我花了点时间自己做了一个Mobile Alert组件。

进入每个视图都会弹出一个Alert窗口,点击Open按钮也会弹出Alert窗口。该组件是用PopUpManager来实现Alert窗口打开和关闭的,因为本人更喜欢Flex Web中的Alert组件的静态方法,比用new关键字来创建简捷一点。

这是在HTC上运行效果图:

横向效果图

点击此处下载源码。

代码不难,有几点要指出一下:

  1. 用resize事件实现了Alert窗口重新居中显示,不知道为何用orientationChange事件来实现不会成功。
  2. show()方法有四个参数,分别表示Alert窗口的标题、消息、容器对象和是否为模态窗口。
  3. 考虑到切换主视图时要清除前一个视图中所有的Alert窗口,因此加了一个removeAll()方法,对每个视图viewDeactivate事件不得不调用该方法,这点比较麻烦。
  4. 该组件由AlertForm.mxml实现界面,很轻量,在窗口关闭时没有回调方法也不能返回函数。需要更高级的功能可以自行扩展。

《在Flex手机应用中使用PopUpManager创建Alert窗口》有4个想法

  1. 我想问下 为什么我一运行就抱一个强转失败的错误啊
    TypeError: Error #1034: Type Coercion failed: cannot convert spark.components.supportClasses::StyleableStageText@65b5479 to spark.components.supportClasses.StyleableTextField.
    at ui::AlertForm/ta_creationCompleteHandler()[C:\Documents and Settings\lynn\桌面\MobileAlert\src\ui\AlertForm.mxml:35]
    at ui::AlertForm/__ta_creationComplete()[C:\Documents and Settings\lynn\桌面\MobileAlert\src\ui\AlertForm.mxml:61]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:13152]
    at mx.core::UIComponent/set initialized()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:1818]
    at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:842]
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]

  2. @临风 #comment-20
    这个实例是用Flex 4.5编写的,StyleableStageText是Flex 4.6才有的类,if(StyleableTextField(ta.textDisplay).numLines > 1)改成IEditableText(ta.textDisplay).multiline就行了。

发表评论