Flex_布局和容器
1、Halo组件也称MX组件,是Flex3的独有组件(按钮、文本字段、容器等)。而Flex4引入了新一代的组件,称为Spark。
Flex4同时支持Halo和Spark。但是很多Halo组件都有更新的Spark组件。
2、布局种类
Spark都支持下面的任何一种布局:
- BasicLayout:绝对布局。使用x,y坐标。
- HorizontalLayout:单行中横向排列。
- VerticalLayout:单列纵向排列。
- TileLayout:网格形式显示组件,创建尽可能多的行和列。
3、绝对布局
绝对布局,使用x,y坐标,允许控制元素的确切位置和大小。
容器的左上角代表坐标原点(0,0)。(Flex中,x坐标从左边开始;y坐标,从顶部开始。)
Application容器默认使用绝对布局。
x,y坐标为负值时,组件会移到视觉范围外。
4、基于约束的布局
在难以确定组件的精确坐标时,可以用绝对布局模式中基于约束的布局方式。基于约束的布局是相对于容器的4个边或容器的中心点来定位组件。
- 4个边: top,bottom,left,right
- 中心点: horizontalCenter,verticalCenter
- baseline:组件的上边与容器的距离
优点是,即使调整窗口大小也可以保持组件的相对位置不变。
5、增强的约束布局(Spark容器不支持,Spark组件支持)
可以在水平和垂直方向上任意创建隐藏的辅助线,然后基于辅助线定位组件。
约束行和约束列的设定(<mx:constraintColumns> <mx:constraintRows>):
- 固定约束: 由绝对数字(像素)来指定
- 相对约束: 根据容器大小的百分比来确定
- 内容大小约束: 约束行和约束列将和最大项目的大小相同
Halo的Canvas容器支持增强约束,Spark容器不支持增强约束,但是Spark组件可以放到Halo容器中。
6、自动布局
自动布局模式下,是将容器定向到位置元素中。
1)使用布局类
Spark容器有4种布局类,其中BasicLayout是绝对布局,其它下面三种则提供了自动布局选项:
- HorizontalLayout
- VerticalLayout
- TileLayout (自动网格布局)
2)使用空间
<mx:Spacer/>组件可以在布局类指定的方向上,使组件隔开相对的距离。
例: <mx:Spacer width=”50%”> // 使组件平均地分开相对距离
7、容器
1)Application
一个应用程序只能有一个,是根容器。
有个特色属性preloader,是启动Flex程序时的进度条。默认是On的,可以Off。
可以装载全局变量和函数。
2)Canvas
是一种最基本的容器,是Halo组件。在增强约束时使用。
3)Group
是一个简单容器,和布局类结合使用,默认BasicLayout布局。
子容器有Hgroup和Vgroup。
4)SkinnableContainer
类似Group,支持换肤。
5)Panel
基于SkinnableContainer,特点在于添加了一个标题栏和一个框架,并默认给子对象绘制边框。
默认使用BasicLayout。
6)ApplicationControlBar
给程序添加了控制栏,和File菜单类似。要和Application容器结合使用。
(ControlBar和它类似,但是效果不好,避免)
7)DataGroup
用于分组数据,可以使用项渲染器渲染数据,从而自定义显示。默认是BasicLayout。
需要将数据发送给DataGroup的dataProvider。
为了显示数据,可以使用如下渲染器:
- spark.skins.spark.DefaultItemRenderer:显示为简单文本
- spark.skins.spark.DefaultComplexItemRenderer:显示为Group容器内的组件。只有当数据包含视觉组件时才有效。
8) SkinnableDataContainer
类似DataGroup,支持换肤.
9)DividedBox、HDividedBox、VDividedBox
这些是Halo组件,他们允许控制大小的调整。
DividedBox支持通过direction属性设置水平和垂直布局方式。
HDividedBox是水平布局,VDividedBox是垂直布局。
10)Form
方便布局表单,纯粹是布局目的。
它包含三个标签
- Form:主容器
- FormHeader:可选,添加标题用
- FormItem:将文本与每个表单输入字段关联
11)Grid
类似HTML的表,顶级的Grid标签用于标识网格的开始,GridRow用于插入行,GridItem用于向网格中输入数据。
下面是使用容器的简单代码(所用到的Skin代码就省略了,FB默认做成的就行):
<?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/mx">
<fx:Script>
<![CDATA[
import flash.events.Event;
import mx.controls.Alert; import mx.collections.ArrayCollection; private function clickHandler2(evt:Event):void
{
Alert.show("Do you want to save your changes?", "Save Changes", Alert.YES|Alert.NO, this);
} [Bindable]
public var somedata:ArrayCollection= new ArrayCollection(["one", "two", "three"]); ]]>
</fx:Script> <fx:Declarations>
<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 --> </fx:Declarations> <mx:Canvas width="100%" height="100%">
<mx:constraintColumns>
<s:ConstraintColumn id="col1" width="40%"/>
<s:ConstraintColumn id="col2" width="60%"/>
</mx:constraintColumns> <s:Button label="btn 1" left="col1:10" right="col1:10" top="100"/>
<s:Button label="btn 2" left="col2:10" right="col2:10" top="60"/> </mx:Canvas> <!-- SkinnableContainer sample -->
<s:SkinnableContainer skinClass="helloSkin">
<s:layout>
<s:HorizontalLayout/>
</s:layout> <s:Button label="btn skin 1"/>
<s:ScrubBar width="100" height="10"/>
</s:SkinnableContainer> <!-- ApplicationControlBar sample -->
<mx:ApplicationControlBar width="80%" top="200">
<s:Button label="appCtlBar Back"/>
<s:Button label="appCtlBar Forward" color="0x00ff55"/>
<s:TextInput width="50"/>
<s:Button label="Search"/>
</mx:ApplicationControlBar> <!-- DataGroup sample -->
<s:DataGroup dataProvider="{somedata}" itemRenderer="spark.skins.spark.DefaultItemRenderer" top="300">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
</s:DataGroup> <!-- Form sample -->
<mx:Form top="400">
<mx:FormHeading label="Form head info"/>
<mx:FormItem label="First Name">
<s:TextInput/>
</mx:FormItem>
<mx:FormItem label="Last Name">
<s:TextInput/>
</mx:FormItem>
</mx:Form> <!-- Grid sample -->
<mx:Grid top="600" left="10">
<mx:GridRow>
<mx:GridItem>
<s:Button label="Rewind"/>
</mx:GridItem>
<mx:GridItem>
<s:Button label="Play"/>
</mx:GridItem>
<!--
<mx:GridItem>
<s:Button label="Forward"/>
</mx:GridItem>
-->
</mx:GridRow>
<mx:GridRow>
<mx:GridItem colSpan="2">
<s:Button label="Stop" width="100%"/>
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
</s:Application>
layout.mxml
8、皮肤
皮肤文件有两条基本规则:
- 必须支持组件可能有的所有状态
- 必须在名为contentGroup的皮肤内定义一个额外的容器
Flex_布局和容器的更多相关文章
- Flex元素布局规则总结,以及布局和容器
一.Flex中的元素分类从功能层面可以把Flex中的元素分为组件(Components)和容器(Containers)两大类:组件 - 是指那类具有明确交互或数据展示功能的元素,例如Button.Ch ...
- CSS3 Flex布局(容器)
一.flex-direction属性 row(默认值):主轴为水平方向,起点在左端. row-reverse:主轴为水平方向,起点在右端. column:主轴为垂直方向,起点在上沿. column-r ...
- WinForm 布局,容器、打印和对话框控件
今天,我主要学习了容器控件.打印控件.对话框控件. 在正式进行今天的内容之前,首先补充了布局的两个属性:Anchor:锁定位置,Dock:填充位置,一般与容器控件配合使用. 之后,我学习了第一部分内容 ...
- CSS3 flexbox 布局 ---- flex 容器属性介绍
flexbox布局是CSS3中新增的属性,它可以很轻松地帮我们解决掉一些常见的布局问题,比如导航栏. 我们用普通的方法写导航栏,通常会在ul, li 结构写好后,让li 元素左浮动,然后再给ul 清浮 ...
- [No000012A]WPF(2/7):布局,容器和布局转换[译]
概要 在上一篇文章中,我讨论了一些WPF应用的基础知识,它们是使用WPF的基本架构和内部结构.在本文中,我将讨论编写你的第一个WPF程序的基本的东西和怎么在你的窗口中布局控件.这是每一个想使用WPF的 ...
- winform 布局、容器
一.布局 属性:1.Anchor: 绑定控件到容器边缘位置保持不变 注:四周全锁定时控件随界面变化时变大 2.Dock:绑定到容器的边缘 注:下控件到边需先将下控件定义到边再将左右控件新建.到边 3 ...
- H5 布局 -- 让容器充满屏幕高度或自适应剩余高度
在前端页面布局中,经常会碰到要让容器充满整个屏幕高度或者剩余屏幕高度的需求.一般这时候都会想当然的使用 height:100% 这样的 CSS 来写. 这样写的话,当容器内内容很多的时候是没有问题的, ...
- 谈谈Ext JS的组件——容器与布局
概述 在页面中,比较棘手的地方就是布局.而要实现布局,就得有能维护布局的容器.可以说,在我试过和使用过的Javascript框架中,Ext JS的布局是做得最棒的一个,而这得益于它强大的容器类和丰富的 ...
- 3_bootsrap布局容器
3.布局容器 BootStrap必须需要至少一个布局容器,才能为页面内容进行封装和方便的样式控制. 相当于一个画板. 帮助手册位置:全局CSS样式------->概览------->布局容 ...
随机推荐
- go中的make和new的区别
适用范围:make 只能创建内建类型(slice map channel), new 则是可以对所有类型进行内存分配 返回值: new 返回指针, make 返回引用 填充值: new 填充零值, m ...
- centos6.5部署OpenStack单节点
环境 最小化安装的centos6.5 设置如下: 一.修改基本配置 1.修改主机名为controller [root@localhost ~]# hostname controller [root@l ...
- VMware虚拟机上配置nginx后,本机无法访问问题(转载)
转自:http://www.server110.com/nginx/201407/10794.html 把nginx装在CentOS上,用本机访问虚拟机的时候却出现了不能访问的问题,查了资料以后,原来 ...
- C# 连接数据库实现增删改查
class Program { private static string urls = "server=127.0.0.1;port=3306;user=root;password=123 ...
- Linux CentOS更改文件的权限
chgrp (全称:change group) groupadd testgroup 添加用户组 chgrp testgroup test1 修改文件的所属用户组是testgroup. 如果test ...
- Nginx 分布式session共享问题
在集群的时候每次访问,都会被代理转到不同的服务器,那么在这些服务器之间如何共享session? 解决方式1:session复制 只能在window下好使,web服务器解决(广播机制,将一台机器上的se ...
- windows 查询文件被什么程序占用
运行Resmon CPU选项卡全选 在[关联的句柄]里查询: 需要的时间挺多的...
- C语言格式化%整理
以输出为例: #include <stdio.h> main() { printf("**进制****************************************** ...
- java正则表达式替换空格和换行符
public class StringUtil { public static String getStringNoBlank(String str) { if(s ...
- 第一类对象-> 函数名 -> 变量名
函数对象对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 可以作为参数进行传递 # def fn(): # print("我叫fn") # fn() # ...