Flex AIR自定义Mobile的弹出框组件

简介:

做Flex Mobile开发的人应该知道,Flex为手机应用并没有提供弹出框组件,需要自定义。

通过查找文档、资料,我做出一个效果还算不错的弹出框组件,可以适用于手机设备上,不多讲,直接贴源码,相信对Flex了解的人都可以一看就懂。

首先,需要MXML定义弹出框组件:

<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
						   xmlns:s="library://ns.adobe.com/flex/spark"
						   xmlns:itemrenderer="com.adobe.mobilecrud.view.itemrenderer.*"
						   width="{screenX * 0.75}" height="{screenY * 0.25}" backgroundAlpha="0"
						   creationComplete="CenterPopUp()"
						   preinitialize="screen_initializeHandler(event)">
	
	<fx:Script>
		<![CDATA[
			import mx.core.FlexGlobals;
			import mx.events.FlexEvent;
			
			[Bindable]
			public var title:String = "";
			[Bindable]
			public var message:String = "";
			
			[Bindable]
			private var screenX:Number;
			[Bindable]
			private var screenY:Number;
			
			// 使应用程序居中
			private function CenterPopUp():void{
				this.x = FlexGlobals.topLevelApplication.width / 2 - this.width / 2;
				this.y = FlexGlobals.topLevelApplication.height / 2 - this.height / 2;
				
			}
			// 初始化窗口大小
			protected function screen_initializeHandler(event:FlexEvent):void
			{				
				screenX = Capabilities.screenResolutionX;
				trace("screenX:"+screenX);
				screenY = Capabilities.screenResolutionY;
			}
			
		]]>
	</fx:Script>
	
	<s:Rect width="100%" height="100%" radiusX="10" radiusY="10">
		<s:stroke>
			<s:SolidColorStroke color="#C2C6C3" weight="1"/>
		</s:stroke>
		<s:fill>
			<s:SolidColor alpha="1.0" color="white"/>
		</s:fill>
	</s:Rect>
	
	<s:VGroup width="100%" height="100%" gap="0" paddingTop="1">
		<s:Group width="100%" height="50">
			<s:Rect width="100%" height="100%" radiusX="10" radiusY="10">
				<s:fill>
					<s:LinearGradient rotation="90">
						<s:entries>
							<s:GradientEntry color="#f9f8f6" ratio="0.00"/>
							<s:GradientEntry color="#e3dfd7" ratio="0.60"/>
							<s:GradientEntry color="#f7f6f2" ratio="1.00"/>
						</s:entries>
					</s:LinearGradient>
				</s:fill>
			</s:Rect>
			<s:HGroup width="100%" height="100%" verticalAlign="middle">
				<s:Image source="@Embed('assets/alert/w1.png')"/>
				<s:Label color="#EE9F29" fontSize="30" fontWeight="bold" text="{title}"/>
			</s:HGroup>
		</s:Group>
		
		<s:Line width="100%">
			<s:stroke>
				<s:LinearGradientStroke caps="round" weight="1">
					<s:entries>
						<s:GradientEntry color="#c2bfad" ratio="0.5"/>
					</s:entries>
				</s:LinearGradientStroke>
			</s:stroke>
		</s:Line>
		
		<s:VGroup width="100%" height="50%" horizontalAlign="center" verticalAlign="middle">
			<s:Label width="92%" height="100%" color="#5a5a5a" fontSize="25" lineBreak="toFit"
					 maxDisplayedLines="2" text="{message}" textAlign="center"
					 verticalAlign="middle"/>
		</s:VGroup>
		
		<s:HGroup width="100%" color="#5a5a5a" fontSize="18" horizontalAlign="center">
			<s:VGroup width="50%" horizontalAlign="center">
				<s:Button id="btnOk" width="100" height="40" label="确 定" chromeColor="#e3dfd7"/>
			</s:VGroup>
			
			<s:VGroup width="50%" horizontalAlign="center">
				<s:Button id="btnCancel" width="100" height="40" label="取 消" chromeColor="#e3dfd7"/>
			</s:VGroup>
			
		</s:HGroup>
	</s:VGroup>
</s:SkinnablePopUpContainer>


组件定义成功后,我们可以写一个as文件,拿它来调用mxml文件:

package alert
{
	import flash.display.DisplayObjectContainer;
	import flash.events.MouseEvent;
	
	import mx.core.FlexGlobals;
	
	import spark.components.View;
	import spark.events.PopUpEvent;
	
	public class Confirm
	{
		private static var confirm:Confirm = null;
		
		private var confirmView:AlertConfirmView = new AlertConfirmView();
		
		private var closeHandler:Function = null;
		
		public static function getInstance():Confirm{
			if(confirm == null){
				confirm = new Confirm();
			}
			
			return confirm;
		}
		
		public function show(owner:DisplayObjectContainer,text:String = '',title:String = '', closeHandler:Function = null):void{
			confirmView.title = title;
			confirmView.message = text;
			
			confirmView.open(owner,true);
	
			if(closeHandler != null){   
				this.closeHandler = closeHandler;
				//confirmView.addEventListener(PopUpEvent.CLOSE,closeHandler);
			}else{
				
			}
			
			confirmView.btnOk.addEventListener(MouseEvent.CLICK,btnClose_clickHandler);
			confirmView.btnCancel.addEventListener(MouseEvent.CLICK,btnClose_clickHandler);
		}
		
		// 处理按钮监听事件
		protected function btnClose_clickHandler(event:MouseEvent):void
		{
			confirmView.btnOk.removeEventListener(MouseEvent.CLICK,btnClose_clickHandler);
			confirmView.btnCancel.removeEventListener(MouseEvent.CLICK,btnClose_clickHandler);
			
			trace(event.currentTarget.id);
			
			if(event.currentTarget.id == 'btnOk'){
				confirmView.addEventListener(PopUpEvent.CLOSE,closeHandler);
				trace("YES");
			}else{
				trace("NO");
			}
			
			confirmView.close();
		}
		// 取消PopUp监听
		public function cancelMonitor():void{
			confirmView.removeEventListener(PopUpEvent.CLOSE,closeHandler);
		}
		
	}
}


其实,内容很简单,关于这方面的资料网上也是有一些的,但尽善尽美的东西却很少,我写的这个也算不得很完美,不过已经很实用了。


源代码下载地址: http://download.csdn.net/detail/zuiwuyuan/8020273



相关文章
|
开发者 容器
ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
Flex组件用于创建弹性布局,开发者可以通过Flex的接口创建容器组件,进而对容器内的其他元素进行弹性布局,例如:使三个元素在容器内水平居中,垂直等间隔分散。 例如:如下的布局代码分别表示:(垂直排列,水平居中,垂直居中)
445 0
ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
|
2天前
|
开发者 UED 容器
鸿蒙next版开发:ArkTS组件通用属性(Flex布局)
在HarmonyOS next中,ArkTS的Flex布局是一种强大且灵活的布局方式,支持水平或垂直方向排列元素,并能动态调整大小和位置以适应不同屏幕。主要属性包括justifyContent、alignItems、direction和wrap,适用于导航栏、侧边栏和表单等多种场景。示例代码展示了如何使用这些属性创建美观的布局。
20 10
|
30天前
|
数据可视化 前端开发 搜索推荐
FLEX组件可视化设计器CSS3代码生成器
FLEX组件可视化设计器CSS3代码生成器
21 4
|
4月前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
6月前
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Flex容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Flex容器组件
195 5
|
6月前
|
容器 API UED
【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)
【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)
279 0
【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)
|
11月前
|
容器
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
79 0
|
前端开发 Java 开发工具
Flutter(七)——多子元素组件:GridView,CustomScrollView,Flex,Wrap
Flutter(七)——多子元素组件:GridView,CustomScrollView,Flex,Wrap
320 0
Flutter(七)——多子元素组件:GridView,CustomScrollView,Flex,Wrap
|
开发框架 小程序 开发工具
APICloud AVM框架列表组件list-view的使用、flex布局教程
avm.js 是APICloud 推出的多端开发框架。使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染效果统一;全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 一致。
204 0
APICloud AVM框架列表组件list-view的使用、flex布局教程
好客租房116-flex布局组件导航菜单
好客租房116-flex布局组件导航菜单
112 0
好客租房116-flex布局组件导航菜单