1.FLEX4状态概述
在很多富互联网应用,网页外观的改变基于用户的行为。一个状态就定义了组件的一种表现样式。要想使用状态,你应该首先定义一个默认的状态,然后在此基础上重写或者更改,这样就形成了一系列的其他样式。你可以添加、移除某些子元素,更改CSS或者属性的值,更改触发的事件。
下面是一个简单的例子:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
width="400" height="300">
<!--定义了二个状态,系统默认状态为第一个-->
<s:states>
<s:State name="State1"/>
<s:State name="State2"/>
</s:states>
<mx:VBox verticalCenter="0"
horizontalCenter="0" >
<s:Button
<!--状态为state1时,设置label属性和单击事件-->
label.State1="Small"
click.State1="currentState='State2'"
<!--状态为state2时,设置width属性、height属性、label2属性和单击事件-->
width.State2="200"
height.State2="200"
label.State2="BIG"
click.State2="currentState='State1'"/>
<!--状态为state2时,该label才显示-->
<mx:Label includeIn="State2"
width="100%"
text="State 2 Only"
textAlign="center"/>
</mx:VBox>
</s:Application>
2.定义状态
flex4里状态的定义与flex3不同,你只需在<states></states>标签内定义状态就可以了。添加子元素和设置属性之类,不在这里进行了。如下所示:
<s:states>
<s:State name="State1"/>
<s:State name="State2"/>
<s:State name="State3"/>
.
.
</s:states>
3.改变状态
UIComponent类定义了一个currentState属性,通过改变这个属性的值来更换状态,这个属性的默认值是定义在需在<states></states>标签内的第一个状态。例如:
<s:Button id="b1" label="Change to State 1" click="currentState='State2';"/>
<s:Button id="b2" label="Change to the default" click="currentState='State1';"/>
当然也可以通过UIComponent类的setCurrentState方法。
4.为一个状态设定属性,样式和事件
在flex4里通过点语法来设定一个组件属于某个状态的属性值。例如:
<s:Button label="Default State" label.State2="New State"/>
上述的代码的意思是,这个按钮的lable值在State2状态下是New State,在其他状态下是Default State。
上述代码也可以这样写:
<s:Button >
<s:label>Default State</s:label>
<s:label.State2>new State</s:label.State2>
</s:Button>
要想在某个状态里清除某个属性的值,可以让属性值等于@clear。如下:
<Button color="0xFF0000" color.State1="@Clear"/>
对于事件也一样可以用点语法,例如:
<s:Button id="b1" label="Click Me"
click="ta1.text='hello';"
click.State1="ta1.text='goodbye'"/>
5.添加或移除组件
在flex4里,添加或移除某个组件,直接在这组件的属性里搞定。组件多了两个属性,includeIn和excludeFrom。includeIn, 表示这个组件要被添加到属性值所指的状态,excludeFrom,表示这个组件要从属性值所指的状态中删除,includeIn和 excludeFrom不能在同一个组件标签里出现,他们的值可以是多个状态,之间用逗号隔开。例如:
<s:states>
<s:State name="default"/>
<s:State name="addCheckBox"/>
<s:State name="addTextInput"/>
<s:State name="addCheckBoxandButton"/>
</s:states>
<s:CheckBox id="myCB" label="Checkbox"
includeIn="addCheckBox, addCheckBoxandButton"/>
<s:TextArea text="Exclude from addTextInput"
excludeFrom="addTextInput"/>
6.更改一个组件的父元素
一个组件的父元素也能变,你信吗?不过flex4真的做到了。用的就是这个<fx:Reparent>标签。还是看段代码吧!
<?xml version="1.0" encoding="utf-8"?>
<!-- states\NewStatesReparent.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:s="library://ns.adobe.com/flex/spark">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:states>
<s:State name="Parent1"/>
<s:State name="Parent2"/>
</s:states>
<s:HGroup>
<s:Panel id="Panel1"
height="100" width="100"
title="Panel 1">
<s:Button id="setCB" includeIn="Parent1"/>
</s:Panel>
<s:Panel id="Panel2"
height="100" width="100"
title="Panel 2">
<fx:Reparent target="setCB" includeIn="Parent2"/>
</s:Panel>
</s:HGroup>
<s:HGroup>
<s:Button label="Parent 1"
click="currentState='Parent1'"
enabled.Parent1="false"/>
<s:Button label="Parent 2"
click="currentState='Parent2'"
enabled.Parent2="false"/>
</s:HGroup>
</s:Application>
这句话:<fx:Reparent target="setCB" includeIn="Parent2"/>什么意思呢?target的值setCB,就是我们要换父亲的组件就是setCB,setCB是第一个panel的Button的id吧!当转换到状态Parent2时,这个Button就成了第二个Panle的子元素。因为 includeIn="Parent2"告诉我们了,在状态Parent2时,就要换了setCB的父元素,换成fx:Reparent的父元素,即第二个panel。
7.添加子元素时的控制
flex4在第一次换到需要这个子元素出现的状态时,它被创建。这是默认的情况。但是,如果这个子元素的创建需要很长时间,那么用户肯定在切换状态时感到延迟,这是不好的。所以,默认的情况,可以改。通过更改itemCreationPolicy,这是组件的一个属性,它有两个值:deferred,默认值,意思是在第一次需要这个组件出现时创建; immediate,它是在程序一被启动就会创建这个子元素。
一旦子元素被创建了,它就会一直存在了。
界面的改变不是仅仅只能通过State。通过导航器,如:Accordion,Tab Navigator,ViewStack containers你也能做到。到底用哪个,取决于你的应用需求以及用户界面的设计。
8.创建状态组
在flex4里,可以给状态分组,比如第一个状态和第二个状态是一组,第三个状态和第四个状态是一组等等。我们先看怎么分组?
<s:State name="default"/>
<s:State name="addCheckBox" stateGroups="Group1"/>
<s:State name="addTextInput"/>
<s:State name="addCheckBoxandButton" stateGroups="Group1"/>
只需添加一个stateGrooups这个属性。
添加分组的好处是什么呢?
如果一个组件在多个状态中出现,你就可以把这些状态划分到一组。那么,当出现这个族里任何一个状态时,这个组件的设置都会有效。点语法后面的值可以是组的名称,excludeFrom和includeIn的值也可以使组的名称。
例1:states简单例子
<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:s="library://ns.adobe.com/flex/spark">
<s:states>
<!-- Define the new view states. -->
<s:State name="default"/>
<s:State name="NewButton"/>
</s:states>
<s:VGroup id="g1">
<s:HGroup>
<!-- Disable Button in the NewButton view state.
当前状态是NewButton时,b1按钮失效
-->
<s:Button id="b1" label="Click Me"
enabled.NewButton="false"/>
<!-- Add a new child control to the VBox. -->
<!-- 状态为NewButton时,该按钮才显示 -->
<s:Button id="b2" label="New Button"
includeIn="NewButton"/>
</s:HGroup>
<s:Button label="Change to NewButton state"
click="currentState='NewButton';"/>
<!-- Define Button control to switch to default view state. -->
<s:Button label="Change to default view state"
click="currentState='default';"/>
</s:VGroup>
</s:Application>
分享到:
相关推荐
- Flex组件有多种状态,如`normal`, `disabled`, `hovered`等。在皮肤中,为每个状态定义不同的图形元素或属性,可以使组件在不同状态下呈现不同的外观。 - 使用`<s:states>`标签来声明和定义组件的状态。 5. **...
在Flex 4中,皮肤(Skin)是一种强大的机制,用于改变和定制UI组件的外观和交互体验。本文将深入探讨FLEX4中的皮肤系统,特别是SparkSkin类,并通过实例展示如何创建和应用自定义皮肤。 1. SparkSkin的介绍: ...
在Flex4中,皮肤定制是UI设计的重要组成部分,它允许开发者根据需求自定义组件的外观和交互效果。本主题主要围绕`SparkSkin`类和`Skin`类展开,这两类在Flex4的皮肤定制中扮演着核心角色。 **SparkSkin介绍** `...
- 在Flex中,状态是通过 `<s:states>` 标签定义的。 - 每个状态都有一个唯一的名称,例如 `<s:State name="Employees"/>`。 - 这些状态定义了应用程序的不同视图,用户可以根据操作在这些视图间切换。 2. **状态...
`SparkSkin` 是一个继承自 `Group` 类型的容器,这意味着它可以包含任何类型的Flex组件。此外,`SparkSkin` 是所有`mx.spark`可视化控件外观的基础类。换句话说,所有可视化的Spark控件的外观都必须继承自`SparkSkin...
在本文中,我们将深入探讨如何使用Adobe Flash Catalyst CS5.5来设计Flex组件的皮肤,特别是针对Button组件。Flex组件皮肤允许开发者自定义组件的外观和交互效果,以实现更丰富的用户界面。以下是对该主题的详细说明...
### FLEX4的皮肤制作教程 #### 一、SparkSkin介绍 ...综上所述,SparkSkin和Skin是Flex 4中非常重要的概念,它们提供了强大的工具来定制UI组件的外观。通过理解和掌握这些技术,可以显著提升应用程序的用户体验。
本篇文章将基于提供的文件信息深入探讨如何在Flex4中实现一个拥有自定义头部背景图片的Accordion组件,并通过代码示例详细解释其实现过程。 #### 核心知识点一:Accordion组件概述 Accordion组件是一种常见的UI...
在Flex4中,皮肤(skin)是一种用于控制UI组件外观的设计模式,允许开发者和设计师定制组件的视觉表现,而不必触及组件的核心功能代码。这不仅提高了开发效率,还实现了设计与逻辑的分离,使得UI设计更加灵活且易于...
- SparkSkin是Adobe Flex 4 (Gumbo)框架中的一个关键类,用于自定义用户界面(UI)组件的外观。它提供了一种机制,允许开发者通过XML或者ActionScript对控件的外观进行高度定制。 - SparkSkin类位于`spark.skins`...
Flex4作为Adobe公司的开源框架,因其强大的跨平台能力与丰富的组件库,被广泛应用于开发复杂的富互联网应用(RIA)。本文将详细介绍如何利用Flex4实现登录过程中的动画特效与状态转换,特别是登录失败时的抖动效果和...
在Flex中,每个MXML组件都有一个默认的State,名为“Normal”,开发者可以添加自定义的State,通过`<s:states>`标签来定义。每个State包含组件的属性、子组件和布局设置,当切换到某个State时,组件会更新相应的属性...
Flex4引入了Spark组件库,其中`s:Window`和`s:WindowedApplication`是用于创建独立窗口的主要类。它们继承自`UIComponent`,提供了丰富的窗口特性,如标题、边框、大小调整等。 2. **添加最大化和最小化按钮**: ...
在Flex4中,自定义组件是一项重要的技能,它允许开发者根据特定需求创建具有独特功能和外观的用户界面元素。本话题聚焦于自定义一个通用的`ImageButton`组件,该组件结合了图像和按钮的功能,提供了更丰富的交互体验...
在Flex4中,组件的外观(皮肤)与逻辑分离,这有助于提升代码的可维护性和可重用性。SkinClass是一种特殊的MXML文件,用于定义组件的视觉表现形式。 #### SkinClass 必须包含的要素 - **HostComponent元数据**:每...
**Transition(过渡)**是Flex中用于平滑转换不同UI组件或整个应用程序状态的动画效果。它们可以帮助我们实现诸如淡入淡出、滑动、旋转等各种视觉效果,使得用户界面更加吸引人。在Flex中,我们可以使用`mx....
Flex中的`states`和`Animate`类可以帮助我们创建动态阴影效果。例如,你可以根据用户交互改变阴影的属性,如颜色、角度或距离。通过在不同状态之间切换,可以实现不同的阴影效果,增强用户体验。 3. **自定义组件...
在Flex开发中,ItemRenderer是一种非常关键的组件,它允许我们自定义数据项在列表或网格等容器中的显示方式。本篇文章将深入探讨如何利用ItemRenderer实现一个灵活且功能丰富的相册示例,同时也会涉及Flex中的一些...