Flex 4 样式与布局

第一篇 Flex 4 与自定义布局(Layout)

Flex 4/Spark组件架构的新功能之一是可以定制一个容器的布局而不必改变容器本身。您需要做的就是定义一个自定义布局。

Flex 4/Spark架构中的容器并不控制它们自己的布局。相反,每种容器具有一个布局属性,用于确定如何在屏幕上设置子元素的布局。可以使用一个单独的Group容器,并赋予其一个垂直布局、水平布局或平铺布局,这取决于您将如何创建它。代码很简单,如下所示:

<s:layout>

<s:VerticalLayout/>

</s:layout>

不过真正的好处在于您不必局限于框架中定义的默认布局。您可以轻松定制BaseLayout类来实现自己定制的布局逻辑。

<s:DataGroup

width="100%" height="100%"

dataProvider="{ dataSource }"

itemRenderer="SimpleItemRenderer">

<s:layout>

<local:CircularLayout />

</s:layout>

</s:DataGroup>

(参考文章:Flex 4与自定义布局:

译文:http://blog.csdn.net/lihe111/archive/2009/07/06/4325571.aspx

原文:http://insideria.com/2009/05/flex-4-custom-layouts.html  )

第二篇 Flex 4 SkinClass 改变组件外观

在Flex 4中,SkinClass指向的文件通常用一个使用s:skin标签(或者sparkskin)的MXML文件进行定义。通过skinclass来改变外观的spark组件通常也是skinclass引用的Host component。Flex 4 中新的改变外观架构可以在很大的程度上将组件和组件的外观设计分开,这样组件外观设计的代码通过改变小部分的代码就可以得到重用了。

一、SkinClass必须包含的三样东西

1、 HostComponent metadata

SkinClass文件需要引用HostComponent对象,而HostComponent是指需要改变外观的组件。我们可以通过metadata标签来指定HostComponent。如:我们需要设置Button的外观,那么Button就是HostComponent。

Code:

  1. <fx:Metadata>
  2. <![CDATA[
  3. [HostComponent("spark.components.Button")]
  4. ]]>
  5. </fx:Metadata>

2、 States

如果HostComponent中有SkinState(一般用metadata标签来声明),例如:

s: ButtonBase中包含了

  1. [SkinState("up")]

那么在相应的skinclass mxml文件中必须有如下相应的state:

1. <s:states>

  1. <s:State name="up"/>

3、 Skin parts

HostComponent中的属性可以被定义为必须或者是可选的部分(skin parts),可选的属性一般通过metadata标签将其默认设置为false。如果s:ButtonBase中包含一下的属性:

[SkinPart(required="false")]

public var labelDisplay:TextBase;

那么,skin文件应该包含一下相应的声明:

<s:Label id="labelDisplay"/>

二、SkinClass的使用方法:

skins.CustomApplicationSkin 为Skinclass指向的mxml文件路径

1、属性引用:

<s:Application     name="Spark_Application_skinClass_test"

xmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"

xmlns:mx="library://ns.adobe.com/flex/halo"

skinClass="skins.CustomApplicationSkin">

</s:Application>

2、CSS引入

<fx:Style>

@namespace s     "library://ns.adobe.com/flex/spark";

s|Application {

skinClass: ClassReference("skins.CustomApplicationSkin");

}

</fx:Style>

3、AS代码指定,比较适合动态皮肤。

<fx:Script>

<![CDATA[

import     skins.CustomApplicationSkin;

protected function     btn_click(evt:MouseEvent):void {

setStyle("skinClass", CustomApplicationSkin);

}

]]>

</fx:Script>

三、示例

word文档Flex 4 skinclass 简单示例》

第三篇 Flex 4 CSS

Flex 4 对CSS做了很大的改进,虽然还不能像HTML那样随心所欲,但是也能满足任何项目的要求了。

Flex 不支持使用层叠样式表 (CSS) 来控制组件的所有可视方面。属性, 比如 x, y, width 和 height 是 UIComponent 类的属性, 而不是其样式, 因此, 无法在 CSS 中进行设置。您还必须知道您的主题支持哪些属性。Flex 中的默认主题并不支持所有样式属性。

在 Flex 中应用样式有许多方法。 某些样式提供更多粒度控制并能以编程方式被执行。其他样式不像那么灵活, 但可能需要较少的计算

一、设置样式的几种方式

  • 使用本地样式定义

<fx:Style>
       @namespace mx "library://ns.adobe.com/flex/halo";
       @namespace s "library://ns.adobe.com/flex/spark";
       .solidBorder{ border-style:solid;}
       #solidBorderPaddedVertically{
        padding-top:12;
        padding-bottom:12;
        border-style:solid;
       }
    </fx:Style>

  • 使用外部样式表

<fx:Style     source="external.css"/>

  • 使用内联样式

可以像设定组件的属性一样在MXML标签中设定样式属性。内联样式的优先级高于本地样式和外部样式。

例如:<:Button id="myButton" fontSize="15" label="My Button"/>

  • 使用 setStyle() 方法

可以在ActionScript中使用方法来操作组件的样式属性。使用setStyle()方法的优先级是最高的。

setStyle() 方法采用两个参数: 样式名称和样式值。

<fx:Script>

<![CDATA[

private     function initVbox():void

{

box2.setStyle("paddingTop",12);

box2.setStyle("paddingBottom",12);

box2.setStyle("borderStyle","solid");

}

]]>

</fx:Script>

二、Flex CSS样式设置

       详细见文档:《FLEX 4 CSS样式设置例》

1、四种基本的选择方式:

       1Type

              例如:s|Button{ color: #FFFFFF; }

              适合任意一个Button的实例。

       2Universal

              例如:* { fontWeight: bold; } (注意要加上*号)

              对程序中所有组件的字体都有效。

       3Class:由组件的stylename属性引用

              例如:.rounded { cornerRadius: 10;

              则引用为:<s:Button styleName="rounded" label="Here be a Button"/>

       4ID:对应组件的ID

              例如:#header{ backgroundColor: #FF0000; } header为组件的ID

Note:四种方式可以也可以通过组合形成新的选择方式

       5)组合方式

例如:.main s|Button{ fontSize: 15; }

即对引用Class main的组件内所有Button的样式都有影响。

 

2、示例(各种使用方法汇总)

<?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"

minWidth="1024"     minHeight="768">

<fx:Style     source="mycss.css"/>

<!--1、全局选择:定制全局样式-->

<mx:Button id="s01ID"     x="500" y="20" label="方式1_1号"/>

<s:Button id="s02ID"     x="500" y="50" label="方式1_2号"     />

<!--2、全局选择器:可在组件的属性里面指定样式类,然后在css中声明相应的样式类-->

<mx:Canvas id="s03ID"     x="500" y="100" width="200"     height="100" styleName="myStyleClass"/>

<!--3、ID选择:组件ID设置相应的组件样式-->

<mx:Canvas id="can01ID"     x="500" y="220" width="200"     height="100"/>

<!--4、派生选择:类里面的组件ID来定义样式-->

<s:VGroup id="vGroupID"     x="500" y="350">

<mx:ProgressBar     id="progressBarID"/>

</s:VGroup>

<!--5、状态选择:通过状态定义样式,只适用于Button组件-->

<s:Button id="can02ID"     x="500" y="450" width="200"     height="100" label="方式5"/>

</s:Application>

1)CssTest.mxml 文件

 

/* CSS file */

@namespace     s "library://ns.adobe.com/flex/spark";

@namespace     mx "library://ns.adobe.com/flex/halo";

/*-----------1、全局选择:定制全局样式-----------*/

mx|Button     s|Button{

color: #FF0000;

}

s|Button{

color: #FF00FF;

}

/*-----------2、全局选择器:可在组件的属性里面指定样式类,然后在css中声明相应的样式类-----------*/

.myStyleClass{

backgroundColor: #000000;

color:#0000FF;

}

/*-----------3、ID选择:组件ID设置相应的组件样式-----------*/

#can01ID{

backgroundColor: #0000FF;

}

/*-----------4、派生选择:类里面的组件ID来定义样式-----------*/

s|VGroup#vGroupID     mx|ProgressBar{

color:#FF0000;

}

/*-----------5、状态选择:通过状态定义样式,只适用于Button组件-----------*/

s|Button:down{

fontSize:20;

color:#FF0000;

}

2)mycss.css 文件

/* CSS file */

@namespace s "library://ns.adobe.com/flex/spark";

@namespace mx "library://ns.adobe.com/flex/halo";

/*-----------1、全局选择:定制全局样式-----------*/

mx|Button s|Button{

color: #FF0000;

}

s|Button{

color: #FF00FF;

}

/*-----------2、全局选择器:可在组件的属性里面指定样式类,然后在css中声明相应的样式类-----------*/

.myStyleClass{

backgroundColor: #000000;

color:#0000FF;

}

/*-----------3、ID选择:组件ID设置相应的组件样式-----------*/

#can01ID{

backgroundColor: #0000FF;

}

/*-----------4、派生选择:类里面的组件ID来定义样式-----------*/

s|VGroup#vGroupID mx|ProgressBar{

color:#FF0000;

}

/*-----------5、状态选择:通过状态定义样式,只适用于Button组件-----------*/

s|Button:down{

fontSize:20;

color:#FF0000;

}

 

 参考文章:

http://wenku.baidu.com/view/4d25346e561252d380eb6ed4.html

http://wenku.baidu.com/view/bde2b74ffe4733687e21aaf8.html

http://blog.163.com/huangwei913@126/blog/static/23263222201251571153630/

flex 4 布局样式的更多相关文章

  1. css3 flex流动自适应响应式布局样式类

    1.再说css3 flex 一旦一个容器赋予了display:flex属性,将会有以下特点: 项目无法设置浮动. 列表的样式会被清除. 无法使用vertical-align设置垂直对齐方式. 目前互联 ...

  2. CSS3知识点整理(四)----布局样式及其他

    包括CSS3多列布局样式.Flexbox伸缩布局.盒子模型等.重点介绍了Flexbox伸缩布局的各种属性用法. 一.多列布局 为了能在Web页面中方便实现类似报纸.杂志那种多列排版的布局,W3C特意给 ...

  3. 2021年3月-第02阶段-前端基础-Flex 伸缩布局-移动WEB开发_流式布局

    移动web开发流式布局 1.0 移动端基础 1.1 浏览器现状 PC端常见浏览器:360浏览器.谷歌浏览器.火狐浏览器.QQ浏览器.百度浏览器.搜狗浏览器.IE浏览器. 移动端常见浏览器:UC浏览器, ...

  4. CSS弹性盒模型flex在布局中的应用

    × 目录 [1]元素居中 [2]两端对齐 [3]底端对齐[4]输入框按钮[5]等分布局[6]自适应布局[7]悬挂布局[8]全屏布局 前面的话 前面已经详细介绍过flex弹性盒模型的基本语法和兼容写法, ...

  5. 记一下flex弹性布局

    flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...

  6. CSS3动画属性和flex弹性布局各个属性

    [CSS3动画的使用] 1.声明一个关键帧(动画): @keynames name{ from{} to{} } 每个阶段的写法: ①可以直接使用from-to的写法 ②可以设置0%-100%的写法, ...

  7. flex 输入框布局

    1:创建一个弹性容器(display:flex) 2:构建2个或3个弹性项目. 3:把弹性项目设置为居中对齐.(align-items:center) 4:改变input自身对齐方式,把它设置为拉伸以 ...

  8. flex弹性布局心得

    概述 最近做项目用flex重构了一下网页中的布局,顺便学习了一下flex弹性布局,感觉超级强大,有一些心得,记录下来供以后开发时参考,相信对其他人也有用. 参考资料: Solved by Flexbo ...

  9. 整理CSS中display flex(布局利器)

    关于display:flex布局,有人了解颇深,我也是看着别人的东西学习的. display:flex的布局是什么.基本概念之类的我根本就不了解,只会用.每次看到概念之类的东西,我都是扫一眼就过去. ...

随机推荐

  1. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  2. Android开发-环境搭建以及HelloWorld

    最近开始进行Android的开发,没有基础完全从0开始.   首先,知道Android开发的官方网站: http://developer.android.com/index.html 网站本身教程非常 ...

  3. org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Server returned error code = 404 for URI.. Check server logs for details

    严重: Servlet.service() for servlet jsp threw exceptionorg.codehaus.xfire.XFireRuntimeException: Could ...

  4. Sencha Touch xtype对应的class

    Sencha Touch 2的有效xtype xtype Class ----------------- --------------------- actionsheet Ext.ActionShe ...

  5. POJ 2153 Rank List (map映射)

    水题,竟然花了那么多时间...主要是不知道为什么,明明在本机上编译过去了,但是用c++提交却编译错误...最后用g++提交AC 题意:给出n个学生的名字,然后给出m个测验. 每个测验给出n个学生的分数 ...

  6. POJ 2464 Brownie Points II (树状数组,难题)

    题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个sta ...

  7. HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)

    做这道题之前,建议先做POJ 1151  Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...

  8. Webpack教程二

    Webpack教程一 开发技巧 启用source-map 现在的代码是合并以后的代码,不利于排错和定位,只需要在config中添加 ... devtool: 'eval-source-map', .. ...

  9. DMS平台从.NET 1.1升级到.NET 4.0的升级步骤

    1)复制新增的项目到4.0平台解决方案对应目录,添加到到解决方案中:2)合并公共文件(比如修改了FormMain主界面.基础类库.售后界面的修改)3)控件的修订(Dev少数属性可能需要手工调整为新的方 ...

  10. 传说中的WCF(12):服务器回调有啥用

    你说,服务器端回调有啥用呢?这样问,估计不好回答,是吧.不急,先讨论一个情景. 假设现有服务器端S,客户端A开始连接S并调用相关操作,其中有一个操作,在功能上有些特殊,调用后无法即时回复,因为在服务器 ...