Flash、Flex、RIA、web、Linux和我的生活
| 这篇文章由zrong于2008-04-9 21:46发表在听说。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |
没有评论
没有引用
在基于Flex4的AIR程序中改变状态栏字体大小
大约1周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: 在基于Flex4的AIR程序中改变状态栏字体大小 在Flex3时代,要改变AIR程序的状态栏字体,可以使用修改CSS的方法: ?View Code XML<mx:Style> .boldRed { color: red; fontSize: 12; fontWeight: bold; } WindowedApplication { statusTextStyleName: boldRed; } </mx:Style> 但是,在Flex4中,这招不管用了,默认的spark组件采用了新的方法来定义皮肤,这直接导致你根本找不到statusTextStyleName属性。 幸运的是,spark提供了更好的方法。spark的Window或者WindowedApplication组件的默认皮肤都包含statusText这个“外观部件”,我们对它的属性进行设置即可。当然,我们也可以完全重写默认的skin,skin采用MXML写成,更好编辑。这个组件的路径在这里: [Flash Builder安装路径]\sdks\[SDK版本]\frameworks\projects\airspark\src\spark\skins\spark\ ?View Code XML<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="init()" status="测试"> <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; s|WindowedApplication { font-size: 12; font-family:"Microsoft YaHei,SimSun"; }
AIR模式窗口
大约3周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: AIR模式窗口 今天在论坛中发求助帖,发现原来发的一个关于AIR实现模式窗口的问题有人回复了,这里记录一下。 解决方法:中文 英文
google联系人自定义导入小工具开发过程及源码
大约2月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: google联系人自定义导入小工具开发过程及源码 一、起因 做这个小工具的起因是把黑莓8700g换成了Android系统的三星i5700。由于我的8700g是4.2版本的ROM,不支持google sync程序的安装,而我换了手机后又懒得再去鼓捣黑莓的刷机,因此就直接用黑莓的管理软件导出CSV文件,然后在gmail的通讯录管理界面中导入。 可是问题就接踵而来,gmail的通讯录导入程序不能识别黑莓导出的所有字段,因此只有部分字段被导入到gmail 通讯录中了,这显然不行。 接着我用gmail通讯录导出了一个csv文件,然后按照导出的CSV文件的格式来修改黑莓导出的CSV文件,并使排序完全一致。结果这样也不行,导入的通讯录更加不完整。 仔细查看了gmail的帮助,根据帮助提供的范例修改了CSV的字段名称,倒是可以导入。但gmail帮助提供的范例中的字段很少,并不能完整的支持我的通讯录。 我试验过的gmail通讯录导入支持的字段如下: 名,姓,公司(或者用“单位”也可以),职务,移动电话,住宅电话,电子邮件地址 如果联系人的信息并不多,那么用上面的字段就可以完成了,可是我的很多联系人,都有超过2个以上的电话,有十几个联系人有4个电话,因此就没办法用这个来导入。 这还不算,最大的问题,是gmail中的导入功能无法支持群组的导入。也就是说,原来在黑莓中对联系人进行的分组,都无法识别成gmail的群组。 要解决以上问题,就只能使用Google Contacts Data API来处理了。 二、分析与选择 Google Data API其实已经提供了很多客户端库,但是唯独没有基于ActionScript的。因此只能使用XML来处理。 1.AIR还是SWF 本来准备做两个版本,先做SWF版,然后转成AIR版,但后来发现SWF有很多限制,因此只能使用AIR来制作这个工具。 SWF的限制包括: 仅支持HTTP协议的POST和GET方法,不支持PUT和DELETE,Google Data API的某些操作是需要PUT和DELETE的。(对PUT、DELETE不清楚的可以看这里) google的跨域文件的限制 2.选择何种google账户认证方式 google提供了三种账户认证的方式(注意:这个页面的ClientLogin的“了解详情”链接是错误的,要访问正确的地址,可猛击这里)、OAuth、AuthSub和ClientLogin,我对这三种都进行了测试。Google推荐使用的是OAuth,这种认证方式复杂但安全,它需要打开google的登录界面进行登录,登录后再返回软件界面。对于桌面程序来说,这就要判断用户的操作,怎样才算作登录成功了。比如判断浏览器的标题栏、或者判断cookie、或者使用时间轮询等等。对于一个小工具来说,这太复杂了。 AuthSub与OAuth类似,但流程要简单一些,还是要使用google的登录界面。 ClientLogin就简单多了,只需要提供google账户的用户名和密码就可以了。因此这个工具使用的是ClientLogin。 3.Google数据API(Google Data API) 这里是Google Data API的列表页面,其中,Goole 账户验证和Google 数据 API是大部分API都要用到的规范,只要涉及到数据处理和账户验证,都要用到这两个API,而对应的产品也有自己的API,例如google通讯录的API就是Google Contacts Data API,联系人API中的很多细节,却是Google 数据 API提供的。 4.E4X 在没有客户端库的情况下,对XML的操作,是个挺麻烦的事情。这个小工具很简单,大部分的工作量其实都花在对XML的处理上。大量的XML操作让我感觉到E4X真的是却是非常方便和优雅。对于E4X操作,下面这两篇文章有很大的参考价值: e4x – 对xml操作的一些示例
[转]十个Flex/Air疑难杂症及解决方案简略
大约3月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]十个Flex/Air疑难杂症及解决方案简略 今天寻找原来写的关于FXG的文章,无意中发现sban写的几篇很不错的文章都看不到了,原来他的博客挂了。google到新的博客,也没有发现原来的博文。但又找到几篇不错的文章,看来还是转过来保险 原文作者:sban 原文地址:http://sban.biz/239 以下为转载 杂症病因及解决方案简略: 1, 在TileList中如果选择档过多,会出现卷轴,当拖动卷轴时,渲染的进度条会出现花屏现象; 并非TileList有这个问题,在Flex3内,DataGrid,List,Tree等控件如果使用不当,均存在这个问题;在先前的fl组件包内的TileList组件也有类似阴影。根本原因在于,使用ItemRenderer的大数据控件,其在渲染时,并不会一次创建所有数据列/行的显示对象 (ItemRenderer),它仅会创建在屏幕上可见的数据列/行,并且重复利用这些显示对象,以提交运行时效率。 可以做这样一种代码实验,以帮助人们理解这种机制:在一个TileList控件内,它本身有滚动条,它的ItemRenderer也使其有滚动条,在多屏数据的情况下,任意滚动一个ItemRenderer的滚动条,然后滚动TileList的滚动条到另一屏,你会发现,虽然数据已经变了,你从未滚动过这个数据,但它与你先前滚动过的那个数据具有相同的滚动位置。 从严格意义上讲,这并不能算是Adobe的bug,因为如果你严格按照Adobe的官方说明使用,多数情况下,是不会出现的,因此这个bug的复现也颇具难度。从Flex SDk 3.5开始,Adobe Flex团队,对所有基于ItemRenderer实现的数据控件针对开发者遇到的问题进行了改良,优化了SDK内部控件实现方法,并且添加了一个 offscreenExtraRowsOrColumns属性,该属性意为非显示区域的行或列数,用于帮助开发者在特定情况下遇到的花屏问题。 如果遇到这个问题,如果解决(方案按优先级自上向下排列): 1) 修改策划 显示大数据时,传统滚动条是一个糟糕的设计,因为人的眼晴对于大量的,重复结构的数据,很难定位上次查看的位置,多数人都是边察看边用指在屏幕上做标记。此种情况下, a)要么不使用滚动条,使用翻页,用户每次翻页后,重新取数据、向数据控件赋值,在这种情况下,DataGrid,TileList等均不会出现花屏问题,因为压根儿就不会有滚动,但在此时,使用Repeater效率更高。 b)要么设计一种粗粒度滚动条,在这种粗粒度滚动中,每一个点相关于翻页设计中的一页,用户拖动时还相当有手感,相对传统滚动条要好许多,这种设计在许多产品中都已经开始使用。 2)在更新DataProvider时手动刷新控件视图 每次当data有变化,均手动再次设置一次ItemRenderer,大意如下: list.itemRenderer = new ClassFactory(YourItemRenderer); 注:在Gumbo中,如果使用Bindable绑定数据,FB在编译时已经做了代码优化。所以,多数时候,按照官方方法可以避免很多问题。 3)使用offscreenExtraRowsOrColumns属性调整 这是最BT的方案,让人感觉是Adobe自己用算法难已处理了,所以请用户告诉控件目前有多少数据列/行在显示区外。具体用法请参照livedoc说明。 2-4,电子白板中,控制权转移;录制;画面同步 在白板开发中,控制权转移,画面同步,录影属于基本功能点。在技术技巧上,录影使用ImageSnapshot取得数据,剩下的便是系统架构师的事情。白板若要做好,方方面面必须设计好,特别是多人同时在线应用。 最基本的白板实现方案是基于ShareObject,但这种实现是demo级的,既浪费资源性能又低,比较合理的设计,作者认为应该是这样: 1)控制权转移实则是多人数据同步,数据同步不要使用SO,当控制权变化时,由Server处理并向Client广播,如果在同一时间内白板只充许有一人控制,此时仅需向二人广播,如果其它人也需要知道当前人控权者是谁,通过另外统一的状态广播实现。 2)画面同步必须设计出二种机制,一种为指令绘制型,另一种为图像同步型。对于后来进入观看白板的人用户,它第一次需要向server请求当前最新的白板画面,server选择一个最可靠的client的白板数据发给新来者,或者使用p2p技术直接由client端发送。指令绘制型用于在活动用户之间更新白板数据、动作。指令需自行设计,这种设计可以轻松实现白板重绘。 3)录影在这里有两种实现,一种为ImageSnapshot,另一种为指令重绘型。 5,FLASH的置顶问题 默认情况下,在网页中swf对象之上放置不了浮动层,解决方案是修改FlashVars属性值,把wmode修改为opaque,同时对照其它对象,排列z-index。 6,聊天表情無法复制粘贴,由于聊天表情是动态文本,所以添加到textflow中的是一个sprite对象 这个问题没有一步到位的方案,属于架构师考虑的设计问题。自定义一种输入框,自定义一套emoticon标签,每一个表情用一个自定义标签标识,监听输入框的copy与paste事件,送入剪辑板的数据仅包含emoticon标签,而不是图像数据,在paste时进行解析、替换。 7,老板模式,当系统焦点离开air程序后,无法检测到系统的key_down事件 系统焦点离开AIR后,即使在AIR中有KEY_DOWN事情监听也无济于事。解决方案是,rumtime升级到AIR 2.0,在AIR程序启动时,同时启动一个C++ native progress,当AIR程序最小化至系统托盘后,由C++程序负责监听系统按键,以此实现AIR程度快捷键呼出。 8,Air注册表操作(登陆启动look程序) Air直接写不了,解决方案有两种方向: 1)与问题7同,使用nvtive progress写注册表
[转]Flash Builder 4中构建纯ActionScript书写的AIR项目
大约5月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]Flash Builder 4中构建纯ActionScript书写的AIR项目 转自:http://flash.9ria.com/viewthread.php?tid=48055 下面介绍个使用Flash Builder 4构建纯ActionScript书写AIR项目的窍门。 1. 文件 > 新建 > “Flex Project” 2. 填项目名: “Foo” 3. 选择 “Desktop (runs in Adobe AIR)” 4. 按 “Finish” 5. 删除 “Foo.mxml” 6. 文件 > 新建 > ActionScript类命名为”Foo”,并使用”flash.display.Sprite”作为超类 7. 按Finish. 8. 右击”Foo.as”并选择”Set as Default Application” 9. 在Foo.as的构造函数中,写下”this.stage.nativeWindow.visible = true;” 10. 完成!
AIR2新功能-增强的拖拽
大约9月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: AIR2新功能-增强的拖拽 看了RIAMeeting的AIR2.0入门教程[二]:拖拽增强文章视频一文后,忍不住研究了一下AIR的拖拽功能以及AIR2提供的File Promise概念。AIR的拖拽基本与Flex的拖拽类似,只是AIR使用flash.desktop.NativeDragManager,Flex使用mx.managers.DragManager罢了。 下面的两个源码就是分别使用文中所提到的AIR1.5的“临时文件”方法与AIR2.0的File Promise方法制作的。 使用方法: 直接把界面中的红色圆形拖动到桌面上,就可以看到桌面上生成了一个图片文件。如下图所示。 如果想更深入的了解拖放,可以看下面两篇文章(当然,都是中文的): 使用 Flex 开发 Adobe AIR 1.5 应用程序-文件和数据-拖放 拖动、复制和粘贴数据
AIR2新功能-侦测USB存储设备
大约9月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: AIR2新功能-侦测USB存储设备 通过侦测StorageVolumeInfo这个单例类的StorageVolumeChangeEvent事件来判断是否有USB存储设备插入了。需要注意以下几点: 如果在设备插入之后运行的程序,那么这个设备被拔出的事件就不会被侦测到了(不知是否是beta的原因) 不能使用StorageVolumeChangeEvent事件侦测已经装载的USB设备,但可以使用StorageVolumeInfo.storageVolumeInfo.getStorageVolumes()方法来获取已装载设备的vector数组 代码范例: ?View Code ACTIONSCRIPT1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication
AIR2新功能-用默认的关联程序打开文件
大约9月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: AIR2新功能-用默认的关联程序打开文件 本文为译文,原文地址 AIR2在File类中添加了一个新的函数:openWithDefaultApplication,使用这个函数,可以再AIR2中调用系统中默认的关联程序打开文件。例如,在AIR2中,如果使用openWithDefaultApplication打开一个doc文档,那么在Windows系统中,就会直接打开Word软件打开它。当然,前提是你安装了Word。 以下几点是需要注意的: 不能打开一个没有关联程序的文件,否则会抛出运行时错误。当然,你可以获取这个错误并给出一个友好提示。 只能在程序安全沙盒中打开文件 不能与被打开的程序的进程通信,如果需要通信,可以使用NativeProcess AIR不会核实被打开文件的正确性 不能打开可执行程序,为了保证AIR程序的平台无关性,必须使用NativeProcess,同时使用本地安装包(例如,在Windows下面使用exe安装包分发AIR程序),才能调用可执行程序 如果要打开一个文件夹,则会调用默认的文件管理软件(例如,在Windows下是资源管理器) 我随便写的一个简单的范例程序代码:
在关闭AIR程序窗口前显示Alert
大约1年前 - 2个评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: 在关闭AIR程序窗口前显示Alert ?Download AIRClose.mxml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" showStatusBar="false" closing="closeHandler(event)"> <mx:Script> <![CDATA[ import org.zengrong.utils.Dialog; private function closeHandler(evt:Event):void { trace(evt.toString()); evt.preventDefault(); Dialog.confirm(‘确定退出?’, _close); } private function _close($yes:Boolean):void {
编译AIR文件303 ERROR问题的解决
大约1年前 - 2个评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: 编译AIR文件303 ERROR问题的解决 环境:Flex Builder 3.02,Flex SDK 3.2,AIR SDK 1.5 编译AIR文件中使用了自定义图标,编译过程中Flex Builder报错如下: Error creating AIR file:303:Error,…… 百思不得其解。因为我分别自定义了16×16、32×32、48×48、128×128这4种大小的图标,后两个没有报错,为什么前两个报错呢? 4个图标都使用Fireworks制作,应该也不存在编码问题。 google上搜索了两条相关的问题讨论其一、其二,未果。 swf文件是可以编译成功的,只是在最后一步AIR打包的时候出错。AIR其实本质就是zip。查看打包前的文件内容,发现icon16和icon32这两个文件并没有被载入进入需要打包的列表中。 在打包前手工添加这两个文件,打包可以成功。 既然手工添加可以,那为什么在编译的时候,Flex Builder不自动把这两个文件加入资源包中呢?文件名称路径都没有任何错误啊! 忽然想到前几天orphen告诉我,“苍蝇不叮无缝的蛋”,计算机本没有错,如果出错,那一定是我错了。 此时灵光一现,“冲突”二字突然浮现与我的脑海,世上万物此消彼长,因此才有汉正街大火与投诉物业公司,若无冲突,怎可体现和谐之美? 想到此处,我茅塞顿开,原来问题还是出于我身!不禁自责不已,深为自己对业余代码民工这个如此有前途之职业之不敬而后悔。想到代码中在AIR窗口图标与任务栏图标中确实引用过这两个图标文件,应该是在最终打包的过程中,由于代码与配置文件两处同时引用这两个文件,造成冲突,导致无法将这两个文件打包。 解决方法很简单,把icon16.png与icon32.png复制并改名即可。我是这么做的: ?View Code XML<icon> <image16x16>assets/icon1616.png</image16x16> <image32x32>assets/icon3232.png</image32x32> <image48x48>assets/icon48.png</image48x48> <image128x128>assets/icon128.png</image128x128> </icon> kao!白白浪费我2小时……
Use OpenOffice.org