flex 4 布局样式
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:
- <fx:Metadata>
- <![CDATA[
- [HostComponent("spark.components.Button")]
- ]]>
- </fx:Metadata>
2、 States
如果HostComponent中有SkinState(一般用metadata标签来声明),例如:
s: ButtonBase中包含了
- [SkinState("up")]
那么在相应的skinclass mxml文件中必须有如下相应的state:
1. <s:states>
- <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> |
- 使用外部样式表
|
<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、四种基本的选择方式:
1)Type
例如:s|Button{ color: #FFFFFF; }
适合任意一个Button的实例。
2)Universal
例如:* { fontWeight: bold; } (注意要加上*号)
对程序中所有组件的字体都有效。
3)Class:由组件的stylename属性引用
例如:.rounded { cornerRadius: 10;}
则引用为:<s:Button styleName="rounded" label="Here be a Button"/>
4)ID:对应组件的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 布局样式的更多相关文章
- css3 flex流动自适应响应式布局样式类
1.再说css3 flex 一旦一个容器赋予了display:flex属性,将会有以下特点: 项目无法设置浮动. 列表的样式会被清除. 无法使用vertical-align设置垂直对齐方式. 目前互联 ...
- CSS3知识点整理(四)----布局样式及其他
包括CSS3多列布局样式.Flexbox伸缩布局.盒子模型等.重点介绍了Flexbox伸缩布局的各种属性用法. 一.多列布局 为了能在Web页面中方便实现类似报纸.杂志那种多列排版的布局,W3C特意给 ...
- 2021年3月-第02阶段-前端基础-Flex 伸缩布局-移动WEB开发_流式布局
移动web开发流式布局 1.0 移动端基础 1.1 浏览器现状 PC端常见浏览器:360浏览器.谷歌浏览器.火狐浏览器.QQ浏览器.百度浏览器.搜狗浏览器.IE浏览器. 移动端常见浏览器:UC浏览器, ...
- CSS弹性盒模型flex在布局中的应用
× 目录 [1]元素居中 [2]两端对齐 [3]底端对齐[4]输入框按钮[5]等分布局[6]自适应布局[7]悬挂布局[8]全屏布局 前面的话 前面已经详细介绍过flex弹性盒模型的基本语法和兼容写法, ...
- 记一下flex弹性布局
flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...
- CSS3动画属性和flex弹性布局各个属性
[CSS3动画的使用] 1.声明一个关键帧(动画): @keynames name{ from{} to{} } 每个阶段的写法: ①可以直接使用from-to的写法 ②可以设置0%-100%的写法, ...
- flex 输入框布局
1:创建一个弹性容器(display:flex) 2:构建2个或3个弹性项目. 3:把弹性项目设置为居中对齐.(align-items:center) 4:改变input自身对齐方式,把它设置为拉伸以 ...
- flex弹性布局心得
概述 最近做项目用flex重构了一下网页中的布局,顺便学习了一下flex弹性布局,感觉超级强大,有一些心得,记录下来供以后开发时参考,相信对其他人也有用. 参考资料: Solved by Flexbo ...
- 整理CSS中display flex(布局利器)
关于display:flex布局,有人了解颇深,我也是看着别人的东西学习的. display:flex的布局是什么.基本概念之类的我根本就不了解,只会用.每次看到概念之类的东西,我都是扫一眼就过去. ...
随机推荐
- javascript_04 数据类型
ECMAScript 数据类型 标准 核心 数据类型 typeof 判断数据类型 数字型 布尔型 对象类型 函数 字符串 undefined 未定义 数字型 字符型 var s='1233 ...
- linshiwendang12--匈牙利
#include<bits/stdc++.h> #define N 10007 using namespace std; vector<int> p[N]; bool vis[ ...
- jQuery - AJAX (keep for myself)
1. 简介:AJAX工作原理图 AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术.(如google地图) 目的:在不重载整个网页的情况下,AJAX 通 ...
- jdbc读取数据库表
把结果集封装为List // 通过结果集元数据封装List结果集 public static List<Map<String, Object>> read(String sql ...
- openSSL漏洞原理及安全加固
2014年4月8日晚,互联网爆出了又一重量级安全漏洞,即CVE-2014-0160,通俗来讲就是OpenSSL出现了安全漏洞. 说 这个漏洞前,先介绍一下OpenSSL,OpenSSL是一个强大的安全 ...
- jQuery提升性能技巧及个人总结
1.将jquery对象缓存起来在for循环中,不要每次都要访问数组的length属性,我们应该先将对象缓存进一个变量然后再操作,如下所示: 代码如下:var myLength = myArray.le ...
- tomcat与IIS在多IP服务器下的支持
同一个服务器下,双IP(或更多IP),实现tomcat与IIS公用80端口. 操作其实也很简单的,首先禁用iis的套接字池,iis绑定一个ip,然后tomcat在绑定另一个ip,最后重启下服务器即可. ...
- 还原TexturePacker plist 文件以及图片的方法 (切开各小图片)
原地址:http://blog.csdn.net/linuxchen/article/details/16865645 Python 脚本:(来自网络) unpack_plist.py 命令行: py ...
- 用ScriptEngine在java中和javascript交互的例子(JDK6新特性)
package demo7; import java.util.Arrays; import java.util.List; import javax.script.Invocable; import ...
- java基础知识回顾之javaIO类---BufferedInputStream和BufferedOutputStream
MP3的复制过程: package com.lp.ecjtu; import java.io.BufferedInputStream; import java.io.BufferedOutputStr ...