- 浏览: 716581 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (389)
- flex (150)
- java (55)
- flex_sharedObject (4)
- iphone/android (7)
- red5 (4)
- blazeds (19)
- ajax (3)
- flex&java (9)
- 聊天室 (2)
- flex的问题 (1)
- game (8)
- flex_xml (1)
- flex组件学习 (2)
- JGroups (1)
- 中转站 (2)
- ruby (7)
- flex_js (5)
- C/C++ (14)
- perl (2)
- db (13)
- air (10)
- hibernate (8)
- flash_flex_as_3d (2)
- struts (4)
- dwr (8)
- freemarker (2)
- AS (22)
- 工具 (6)
- js_jquery_ext_yui (4)
- .net (1)
- C# (1)
- 前端 (1)
最新评论
-
136900923:
您好,您的代码我不是很懂,我想跟您交流一下,我的qq邮箱:13 ...
hibernate做无限极菜单树如此简单 -
fykyx521:
两个同一个功能
flex_flush_Socket 安全沙箱解决 -
ustb:
你上下两个代码类之间没关系
flex_flush_Socket 安全沙箱解决 -
u010656335:
...
flex发送QQ表情 -
u010656335:
flex发送QQ表情
http://hi.baidu.com/ls_mcx/blog/item/716d3ebe7b538b0618d81f71.html
类,他们的作用就是把样式信息注册到 StyleManager,这样在生成组件的时候组件能得到自己的样 式信息。 在flex builder 安装目录下的 sdks\3.0.0\frameworks\libs 目录有一个framework.swc 文件,你 用Winrar 打开会看到 defaults.css这个文件。Defaults.css文件定义了flex组件的默认样式,这里 的每一个css选择符(selector)就对应上面的一个类。其实上面的那些类是flex编译器按照这个 defaults.css 文件在编译时自动生成的。 package import flash.display.Sprite; [ExcludeClass] public class _ButtonStyle public static function init(fbs:IFlexModuleFactory):void } 以通过 StyleManager.getStyleDeclaration(selector:String):CSSStyleDeclaration 方法获 得在 defaluts.css文件中定义的样式信息。 需要注意的是如果你在编译时添加了其他的主题,那么主题的样式会覆盖 defaluts.css文件中的样 式。 那么你的 _ButtonStyle类中的 this.cornerRadius = 8; 而不是 this.cornerRadius = 4; 那么编译器编译时会生成一个 import flash.display.Sprite; [ExcludeClass] public class _FlashsheStyle public static function init(fbs:IFlexModuleFactory):void } 类。在执行 Main.mxml (假设我们的Flex工程的主文件为Main.mxml)类的构造函数时会调用 StyleManager.mx_internal::initProtoChainRoots();方法,执行完后 StyleManager.stylesRoot属 性 指向一个 Object,通过这个 Object我们就可以访问到defaults.css文件中Global css 选择符定 义的样式信息,如果你的Global css 选择符中定义了 color: #0B333C; 那么 StyleManager.stylesRoot[color]的值就为 0x0B333C。(注意这些都是 flex框架的内部方法,所以 你不要尝试去访问,大部分情况下如果你访问的话编译器会报错,即使能访问,也不要去做) 当我们在flex中调用 addChild(child)的时候,其中包含了下面几步: 程序代码 看如下一个mxml文件: 程序代码 <?xml version="1.0" encoding="utf-8"?> 程序代码 /* one.css */ Button MyButton 最后将这些样式信息存储到 UIComponent的inheritingStyles 和 nonInheritingStyles 属性中。 这样调用UIComponent.getStyle(styleProp:String):* 就可以得到正确的样式值了。 Flex框架通过这种方式,我们就可以在组件创建过程中得到组件的样式信息,方便我们在 createChildren(),commitProperties(),layoutChrome(),measure(),updateDisplayList()方法中 访问。在组件的构造函数中就不要使用 UIComponent.getStyle(styleProp:String):* 方法,因为你 调用getStyle方法返回的是null。样式信息是用来渲染组件用的,所以没有必要在构造函数中使用。 组件的styleChanged(styleProp:String)方法就会被调用,然后我们在styleChanged (styleProp:String)方法体里面根据参数styleProp的值的不同来对组件的样式做出相应的处理。那 么什么时候组件的styleChanged(styleProp:String)方法会触发呢?下面介绍如下: 1,setStyle()方法 样式是否是可继承样式,如果是,则调用该组件的所有子孙的styleChanged(styleProp)方法。比如 : color="#ff0000"/> styleName="ageLabel"/> 当我们调用 myCanvas.setStyle("color", 0xff0000)的时候,首先会重新设置该组件的样式缓存 (CSS style cache), ("color"); 因为 ,text2.styleChanged("color"),text3.styleChanged("color"),text4.styleChanged("color") ,myBtn.styleChanged("color"); myCanvas.styleChanged("backgroundColor")因为backgroundColor不是可继承样式,所以myCanvas 的子孙的styleChanged(styleProp)方法不会被调用。 2. addChild(chlid)的时候 chlid.styleChanged(null) 和chlid的子孙的styleChanged(null)方法。 3, 设置 styleName 子孙的样式缓存,然后调用chlid.styleChanged("styleName")和chlid的子孙的styleChanged ("styleName")方法。 4, 运行时载入样式表单 update:Boolean = true, trustContent:Boolean = false, applicationDomain:ApplicationDomain = null, securityDomain:SecurityDomain = null)方法。当把参数update设置为true时表示样式表 单载入完成后马上更新样式。其原理是:样式表单载入完成后程序中的所有组件会重新设置组件的样 式缓存,并调用组件的styleChanged(null)方法。 当我们建立一个ActionScript自定义组件(ActionScript Custom Components),并且该组件支持自 定义样式的时候,我们的组件类里面必须要有一个 自定义组件支持自定义样式”你可以参考Flex帮助文档里面的 ActionScript Custom Components / Custom Style Properties 一节。 下面是 UIComponent 组件里面的styleChanged(styleProp:String):void方法的定义,和本文无关, 只是方便我自己查阅而放在这里。 update.</p>
docFrameHandler 函数开始执行。
首先会执行很多Singleton.registerClass方法,然后执行有[Mixin]元标签的类的
public static function init(fbs:IFlexModuleFactory):void 方法
Flex编译器编译时会生成很多 有[Mixin]元标签的类 其中大部分类都与样式有关,象下面这些
程序代码
"_alertButtonStyleStyle", "_ScrollBarStyle",
"_activeTabStyleStyle", "_textAreaHScrollBarStyleStyle",
"_ToolTipStyle", "_advancedDataGridStylesStyle",
"_comboDropdownStyle", "_comboDropDownStyle",
"_ContainerStyle", "_textAreaVScrollBarStyleStyle",
"_linkButtonStyleStyle", "_globalStyle", "_windowStatusStyle",
"_windowStylesStyle", "_activeButtonStyleStyle",
"_errorTipStyle", "_richTextEditorTextAreaStyleStyle",
"_CursorManagerStyle", "_todayStyleStyle", "_dateFieldPopupStyle",
"_plainStyle", "_dataGridStylesStyle", "_ApplicationStyle",
"_headerDateTextStyle", "_ButtonStyle", "_VScrollBarStyle",
"_popUpMenuStyle", "_swatchPanelTextFieldStyle",
"_opaquePanelStyle", "_weekDayStyleStyle", "_headerDragProxyStyleStyle"
下面就是其生成的_ButtonStyle 类:
程序代码
{
import mx.core.IFlexModuleFactory;
import mx.core.mx_internal;
import mx.styles.CSSStyleDeclaration;
import mx.styles.StyleManager;
import mx.skins.halo.ButtonSkin;
{
{
var style:CSSStyleDeclaration = StyleManager.getStyleDeclaration("Button");
if (!style)
{
style = new CSSStyleDeclaration();
StyleManager.setStyleDeclaration("Button", style, false);
}
if (style.defaultFactory == null)
{
style.defaultFactory = function():void
{
this.paddingTop = 2;
this.textAlign = "center";
this.skin = mx.skins.halo.ButtonSkin;
this.paddingLeft = 10;
this.fontWeight = "bold";
this.cornerRadius = 4;
this.paddingRight = 10;
this.verticalGap = 2;
this.horizontalGap = 2;
this.paddingBottom = 2;
};
}
}
}
看完了就明白了吧,也就是说当这些类的 init(fbs:IFlexModuleFactory)方法执行完后,我们就可
假如你的主题 中定义了
程序代码
Button
{
cornerRadius: 8;
}
当然你在主题中添加的新的css选择符在编译时也会生成相对应的类。比如你在主题中增加了
程序代码
.flashshe
{
color: #ff0000;
}
程序代码
view plaincopy to clipboardprint?
package
{
import flash.display.Sprite;
import mx.core.IFlexModuleFactory;
import mx.core.mx_internal;
import mx.styles.CSSStyleDeclaration;
import mx.styles.StyleManager;
[ExcludeClass]
public class _FlashsheStyle
{
public static function init(fbs:IFlexModuleFactory):void
{
var style:CSSStyleDeclaration = StyleManager.getStyleDeclaration(".flashshe");
if (!style)
{
style = new CSSStyleDeclaration();
StyleManager.setStyleDeclaration(".flashshe", style, false);
}
if (style.defaultFactory == null)
{
style.defaultFactory = function():void
{
this.color = 0xff0000;
};
}
}
}
}
package
{
import mx.core.IFlexModuleFactory;
import mx.core.mx_internal;
import mx.styles.CSSStyleDeclaration;
import mx.styles.StyleManager;
{
{
var style:CSSStyleDeclaration = StyleManager.getStyleDeclaration(".flashshe");
if (!style)
{
style = new CSSStyleDeclaration();
StyleManager.setStyleDeclaration(".flashshe", style, false);
}
if (style.defaultFactory == null)
{
style.defaultFactory = function():void
{
this.color = 0xff0000;
};
}
}
}
addingChild(child);
$addChildAt(child, index);
childAdded(child);
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" xmlns:ns1="*">
<mx:Style source="one.css"/>
<mx:Style>
.myBtn
{
color: #00ff00;
fontSize: 14;
}
</mx:Style>
<!-- MyButton 组件 从 Button 继承 -->
<ns1:MyButton id="testBtn" x="27" y="200" color="#0000ff" styleName="myBtn"/>
</mx:Application>
{
color: #ff0000;
}
{
fontWeight: 16;
}
当生成 MyButton 时 过程如下:
首先调用 addingChild(testBtn), 在这个方法里面
1,获得 Global css 选择符中定义的样式的一份拷贝(通过 StyleManager.stylesRoot);
2,查找 Button css 选择符,将里面的样式添加到global拷贝中,同名的样式就覆盖;
3,查找 MyButton css 选择符,将里面的样式添加到global拷贝中,同名的样式就覆盖;
查找完type selector后开始查找class selector
4, 查找 .myBtn css 选择符,将里面的样式添加到global拷贝中,同名的样式就覆盖;
查找完 class selector 后开始查找inline style
4,将 color="#0000ff" 样式添加到global拷贝中,同名的样式就覆盖;
每当组件需要重新设置自己的样式时(比如说调用了setStyle()方法或者设置了styleName属性),
当我们调用setStyle()方法的时候,首先会调用该组件的styleChanged(styleProp)然后判断改变的
程序代码
<mx:Canvas id="myCanvas">
<mx:Vbox id="box" x="0" y="10" width="200">
<mx:Label id="text1" text="@Resource(key='name', bundle='test')"
<mx:Label id="text2" text="@Resource(key='age', bundle='test')"
<mx:Label id="text3" text="@Resource(key='sex', bundle='test')"/>
<mx:Label id="text4" text="{resourceManager.getString('test', 'sex')}"/>
</mx:Vbox>
<mx:Button id="myBtn" x="27" y="100" label="change" click="changeHandler(event)"/>
</mx:Canvas>
这样调用myCanvas.getStyle("color")时就能得到值0xff0000。然后调用myCanvas.styleChanged
color是可继承样式,所以会接着调用box.styleChanged("color"),text1.styleChanged("color")
当我们调用 myCanvas.setStyle("backgroundColor", 0xff0000)的时候,首先调用
当我们使用addChild(chlid)时,首先会重新设置该组件和该组件的子孙的样式缓存,然后调用
当我们给一个组件(比如实例名是child)设置styleName属性时,首先会重新设置该组件和该组件的
运行时载入样式表单我们通常会使用StyleManager.loadStyleDeclarations(url:String,
程序代码
override public function styleChanged(styleProp:String):void
{
// 方法体
}
方法。为什么呢?应为如果没有这个方法,你怎么来检测你的样式的改变呢?
通过我上面的分析,相信你一定能设计出一个出色的适应Flex框架的支持自定义样式的组件。关于“
程序代码
view plaincopy to clipboardprint?
/**
* Detects changes to style properties. When any style property is set,
* Flex calls the <code>styleChanged()</code> method,
* passing to it the name of the style being set.
*
* <p>This is an advanced method that you might override
* when creating a subclass of UIComponent. When you create a custom component,
* you can override the <code>styleChanged()</code> method
* to check the style name passed to it, and handle the change accordingly.
* This lets you override the default behavior of an existing style,
* or add your own custom style properties.</p>
*
* <p>If you handle the style property, your override of
* the <code>styleChanged()</code> method should call the
* <code>invalidateDisplayList()</code> method to cause Flex to execute
* the component's <code>updateDisplayList()</code> method at the next screen
*
* @param styleProp The name of the style property, or null if all styles for this
* component have changed.
*/
public function styleChanged(styleProp:String):void
{
// If font changed, then invalidateProperties so
// we can re-create the text field in commitProperties
if (this is IFontContextComponent && hasFontContextChanged())
invalidateProperties();
// Check to see if this is one of the style properties
// that is known to affect layout.
If (!styleProp ||
styleProp == "styleName" ||
StyleManager.isSizeInvalidatingStyle(styleProp))
{
// This style property change may affect the layout of this
// object. Signal the LayoutManager to re-measure the object.
invalidateSize();
}
if (!styleProp ||
styleProp == "styleName" ||
styleProp == "themeColor")
{
initThemeColor();
}
invalidateDisplayList();
if (parent is Iinvalidating)
{
if (StyleManager.isParentSizeInvalidatingStyle(styleProp))
Iinvalidating(parent).invalidateSize();
if (StyleManager.isParentDisplayListInvalidatingStyle(styleProp))
Iinvalidating(parent).invalidateDisplayList();
}
}
发表评论
-
转深入理解Flash的沙箱 – Security Domains
2014-01-22 09:35 837一篇很经典的进阶文章,国外牛人的分享,清晰明了,图文并茂,适 ... -
flex 很有用的东东!
2010-06-17 23:50 1262网上找了好久,原来API中就有! -
flex出现的一些问题
2010-04-08 12:19 16621.kingnarestyle.swf和flexlib 的Su ... -
在FlexBuilder3中使用Actionscript3进行元编程
2010-03-11 19:15 1033http://flash.9ria.com/thread-46 ... -
Error: No class registered for interface mx
2010-02-01 09:36 1243http://www.gold98.net/blog/arti ... -
Flash 视频(FLV)编码,转换,录制,播放方案一网打尽
2010-01-16 18:34 2017http://www.htmlit.com.cn/post/8 ... -
FLEX中使用FLVPlayback控件.
2010-01-16 18:29 1395http://www.cnblogs.com/xxcainia ... -
flex 继承Application及xml命名空间
2009-12-30 18:43 1519<?xml version="1.0" ... -
flex Repeater effert加效果
2009-12-15 17:25 1520package cn.ishion.component { ... -
学习自定义组件---ConstomButton
2009-12-14 15:06 1828效果只是让Button动了下, 上传了flash源文件 p ... -
flex编译生成的As代码
2009-12-09 18:30 1312new flexProject ->起名叫 test ... -
flex自定义preloader
2009-12-09 17:43 1912package cn.ishion.component { ... -
flex自定义程序 preloader 加载多个资源
2009-12-09 02:05 2283package cn.ishion.component { ... -
Flex Builder编译错误An internal build error has occurred的解决方法
2009-12-05 16:44 3211原文:http://as3blog.com/resources ... -
flex uicomponent.addChild(Button) Button不显示
2009-12-04 19:23 2141设置下Button的宽度和高度就行了 var ui:U ... -
as3 xls导出excel乱码问题解决办法
2009-12-04 11:37 3391http://blog.csdn.net/Baijinwen/ ... -
FlashDevelop配置Flex4(gumbo)环境
2009-12-04 10:27 3052http://www.flexrain.cn/fl ... -
flex gooogle code as3xls导出数据到excel
2009-12-03 19:16 2357var ex:ExcelFile=new ExcelFile ... -
Flex坐标系统及转换
2009-12-02 22:10 3097http://flash.9ria.com/thread-40 ... -
flex动态切换皮肤
2009-11-23 18:06 2019http://www.cnblogs.com/mobile/a ...
相关推荐
在"Flex样式范例网站"中,你可以通过查看和分析不同的示例,了解并实践这些概念,从而深入理解Flexbox的工作原理,并将其应用到自己的项目中。这将帮助你创建更加灵活、响应式的网页设计,提升用户体验。
Flex样式浏览器生成器是一款强大的工具,专为前端开发者设计,旨在简化使用Flex布局时的CSS编写过程。这个工具提供了一个可视化的界面,允许用户通过直观地拖拽和调整元素来生成相应的CSS代码,极大地提高了开发效率...
让我们深入探讨Flex布局的原理、优势以及如何利用这个公共样式包来提升开发效率。 1. **Flex布局简介** Flex布局是CSS3的一种布局模式,它允许容器对其子元素进行更精细的控制,调整它们的大小、顺序和位置,以...
通过理解Flex布局的原理和CSS3变换的用法,我们可以构建出更多创新且富有吸引力的用户界面。在这个例子中,六面体翻转不仅展示了Flex布局的灵活性,还展示了CSS3在创建动态效果方面的强大能力。
本文将深入探讨Flex控件折叠效果的相关知识点,包括其工作原理、实现方式以及实际应用。 Flex是一种用于创建富互联网应用程序(RIA)的开源框架,主要由Adobe Systems开发。在Flex中,我们可以利用各种组件如...
- 教学与学习:帮助初学者理解Flex组件的样式工作原理和定制方法。 总之,Flex2StyleExplorer是Flex开发者的重要辅助工具,它简化了样式管理和定制的过程,提高了开发效率,并为Flex应用带来了丰富的视觉表现。...
这个压缩包可能包含了Flex SDK中的源代码,允许开发者深入理解Flex的工作原理并进行定制化开发。下面将详细探讨Flex系统源码的相关知识点。 1. **Flex SDK**: Flex Software Development Kit是Adobe开发的一套工具...
Flex组件是一种广泛应用于Web开发中的布局工具,尤其在创建响应式设计时,它能帮助...通过研究这些源代码,开发者可以深入了解Flex布局的工作原理,并将其应用到实际项目中,创建出响应迅速、布局灵活的用户界面。
通过理解Flex项目的结构和皮肤系统的工作原理,我们可以更好地定制和优化应用程序的外观,提升用户体验。无论是使用预设的“经典”主题,还是创建全新的主题,Flex都提供了足够的工具和支持来满足开发者的需求。
Flex 工作原理** **2.1 Flex 运行机制** Flex应用程序在用户的浏览器中由Flash Player解释和执行。当用户与Flex应用交互时,Flash Player处理图形渲染、事件处理和数据通信。通过使用HTTP、AMF(Action Message ...
其工作原理类似于`justify-content`,但应用于多行布局。 三、Flex项目的属性 1. `flex-grow`:定义项目的放大比例,如果存在剩余空间,会按照这个比例分配。默认值为0,意味着不会放大。 2. `flex-shrink`:定义...
在前端开发中,Flex布局(Flexible Box)是一种强大的盒模型布局方式,允许开发者轻松地创建响应式和动态的用户界面。...这个基础布局模板是一个很好的起点,可以帮助开发者快速上手并深入理解Flex布局的工作原理。
标题 "flex chart" 指的是使用 Adobe Flex 技术创建的数据图表组件。Flex 是一个开源框架,主要用于构建富互联网应用...结合博客中的源码和工具,学习者可以深入理解 Flex Chart 的工作原理,并应用到自己的项目中。
Flex 3D标签云是一种在Flex平台上创建动态、立体效果的标签展示技术,它通过将传统的二维标签转换为三维空间中的旋转元素,为用户提供...开发者可以通过研究这些文件,理解其工作原理,并根据自身需求进行定制化开发。
通过查阅这个CHM文件,开发者可以快速查找所需的方法、类和属性,理解它们的工作原理,并在实践中应用。无论是初学者还是经验丰富的开发者,都能从中受益,提升开发技能,构建出更加精致和高效的Flex应用。
- 实践是最好的老师,尝试修改压缩包中的皮肤文件,观察组件外观的变化,这有助于理解皮肤的工作原理。 - 使用Flex Builder或IntelliJ IDEA等IDE进行调试,可以帮助快速定位问题并优化皮肤设计。 总之,自定义...
通过理解SparkSkin的结构和工作原理,以及如何应用和创建自定义皮肤,开发者能够为Flex应用程序带来独特的视觉风格和交互体验。这不仅增强了用户界面的美观性,也提高了应用程序的可定制性和灵活性。
这对于学习Flex 3组件的内部工作原理和自定义组件样式具有极大的价值。 总的来说,Adobe Flex 3 Component Explore是一个强大的工具,它使得Flex开发变得更加直观和高效。通过深入研究和实践,开发者可以充分利用...
2. ActionScript与Java数据类型映射,理解AMF的工作原理。 3. 使用BlazeDS或GraniteDS配置和调用Java服务。 4. 如何处理Flex与Java之间的数据传输,包括数据封装和解封。 5. 在Java后端处理Flex请求,例如实现业务...