`

Flex4基础-组件定位和容器布局

    博客分类:
  • Flex
 
阅读更多

以下资料部分来自Adobe中文网,但资料年代已久,根据我自己的实验对部分内容进行了更新。

 

首先了解一个基础定义:容器和组件,组件是button、textInput等用于显示的基础控件,容器是用来存放组件的,多个组件可以放在同一容器中。

Flex的依靠容器来执行布局,大多数 Flex 容器使用预定义的规则集来自动定位您在其内定义的所有子组件。Flex 4 容器可以提供一套默认的布局:Basic、Horizontal或 Vertical以及能够基于容器内容的默认尺寸。有些容器是可植皮的,可以通过在它们的皮肤上添加Spark Scroller对它们进行滚动操作。

 

Flex 应用程序中定位组件的方法有三种:

    使用自动定位

    使用绝对定位

    使用基于限制的布局

 

  • 使用自动定位

对于大多数容器, Flex 会根据容器的布局规则 (如布局方向、容器填充和容器内的组件之间的间隙) 自动定位容器子级。对于使用自动定位的容器, 直接设置其子组件的 x y 属性或调用 move() 方法没有任何效果, 或仅有一个临时效果, 因为布局计算将组件的位置设置为一个计算的结果, 而不是指定的值。

Flex4中自动定义使用<s:HorizontalLayout/><s:VerticalLayout/>来定位:使用HorizontalLayout,容器内的组件会排放在竖直方向(同一列排放),使用<s:VerticalLayout/>,容器内的组件会排放在水平方向(同一行排放)。

可以通过指定容器属性控制容器内组件的布局格式,下列属性是最常见的:

horizontalAlign: 布局元素的水平对齐方式,可能的值有 "left" "center" "right"

verticalAlign: 布局元素的竖直对齐方式,可能的值有 "top" "middle" "bottom"

Flex4相对Flex3在标签上有很大改动,Flex4的布局采用s标签的形式来配置。看下面这个例子:首先对整个面板定义了VerticalLayout(竖直布局),同时水平和竖直都居中,然后在Application容器中定义了一个panel面板,panel面板定义了HorizontalLayout(水平布局),水平对齐方式采用了右对齐的方式。

 

<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" minWidth="955" minHeight="600">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"  verticalAlign="middle"/>
	</s:layout>
	
	<s:Panel width="30%" height="60" title="panel布局">
		<s:layout>
			<s:HorizontalLayout  verticalAlign="middle" horizontalAlign="right"/>
		</s:layout>
		<s:Button label="按钮1" x="36" y="47"/>
		<s:TextInput/>
	</s:Panel>
	
	<s:TextInput text="文本框"/>
	<s:TextArea text="多行文本框"/>
</s:Application>
 

最后看运行结果:

  • 使用绝对定位 

使用绝对定位, 你通过使用其 x y 属性来指定子控件的位置, 或者指定基于限制的布局;否则, Flex 会将该子级置于父容器的位置 0,0 处。 当您指定 x y 坐标时, 仅当您更改这些属性值时, Flex 才会重新定位控件。使用<s:BasicLayout/>标签表示绝对定位。

下面这个例子使用了据对定位标签,容器内名为“按钮1”的组件未定义坐标则默认放在(00)位置,其它组件定义了xy则排放在指定位置。

 

<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" minWidth="955" minHeight="600">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<s:Button label="按钮1"/>
	<s:Button x="92" y="0" label="按钮2"/>
	<s:TextInput x="0" y="29"/>
</s:Application>
  

运行效果如下图所示:


 

  • 使用基于限制的布局

您可以通过使用基于限制的布局同时管理子组件大小和定位子组件, 在该布局中您锚定组件的侧边或中心以相对于组件的容器进行定位。

您可以使用基于限制的布局来确定支持绝对定位的任何容器的即时子级的位置和大小。

您通过使用子组件的 top bottom left right horizontalCenter verticalCenter 样式属性来指定限制。

→锚定组件的边缘

您可以将组件的一个或多个边缘锚定在其容器的相应边缘的某个像素偏移处。 当容器调整

大小时, 锚定的子级边缘保持与父级边缘的距离相同。

top bottom left right 样式属性指定组件侧边与相应的容器侧边之间的距离 (以像素计)。比如top,表示组件的上边界离容器上边界的像素距离。注意:所有锚定属性的值必须为整数,不能是”100px”之类的。

如下例所示,在一个panel容器中放入一个button,指定上下左右的锚点都是50像素:

 

<s:Panel x="41" y="27" width="250" height="200">
		<s:Button top="50" bottom="50" left="50" right="50" label="按钮"/>
</s:Panel>
 

如果在一个方向中锚定两个边, 如顶边和底边, 则在调整容器大小时, 也会调整组件大小(组件可能被拉伸或压缩)。上例运行结果如下图所示:

 

→锚定组件的中心

您还可以将某个子组件的水平或垂直中心 (或全部两者) 锚定在容器中心的某个像素偏移处。除非您同时使用基于百分比的大小调整, 否则该子级不会在指定的尺寸内调整大小。

horizontalCenter verticalCenter 样式指定在指定的方向上组件的中心点与容器的中心之间的距离(以像素计);一个负数会从中心向左或向上移动组件。

下面的示例定义了一个panel容器,容器中放有三个button,中心锚点位置都不同:

 

	<s:Panel x="41" y="27" width="250" height="200">
		<s:Button horizontalCenter="-50" verticalCenter="-50" label="按钮1"/>
		<s:Button horizontalCenter="0" verticalCenter="-0" label="按钮2"/>
		<s:Button horizontalCenter="50" verticalCenter="50" label="按钮3"/>
	</s:Panel>
 

运行效果如下图所示:

 

以上三种布局方式可以混合使用,以达到最终目的。

不过有些规则需要注意:不要使用verticalCenter样式属性指定topbottom样式属性, verticalCenter值会覆盖其他属性。类似地,不要使用horizontalCenter样式属性指定leftright样式属性。

由基于限制的布局确定的大小会覆盖任何显式或基于百分比的大小规范。例如,如果您指定 left right 样式属性,产生的基于限制的宽度会覆盖由 width percentWidth 属性设置的任何宽度。

 

最后,给出需要牢记的若干通用技巧:

  • 总体来说, 应该选择使用限制条件 而不选择具有(x,y)值的绝对定位方式,因为限制条件可以动态地调整浏览器的大小。 当为web、桌面、手机和平板电脑设备开发跨平台的应用程序时,这一点更为重要,因为这些设备的屏幕尺寸变化较大。
  • 一般来说,可以将 left/right 用于大小调整目的,而将 horizontalCenter 和verticalCenter 用于定位目的。
  • 对于一般居中定位目的,特别是当启动最小尺寸窗口并且你希望对一个对象进行居中定位时,可以使用horizontalCenter。

 

  • 容器滚动条设置

容器用来装载组件等内容,如果容器内组件过多可能会造成内容过长过宽等情况,所以我们会考虑使用滚动条来固定容器长宽。

在Flex 3中,滚动功能内置于组件;而在 Flex 4中,该功能的实现方式不同。对Group 容器以及 Hgroup、Vgroup和 DataGroup 容器进行滚动操作的最佳方法是在一个Spark Scroller对象中包装容器。 关键之处是将Scroller的宽度和高度设置为你希望查看内容的尺寸。你也可以设置滚动位置以便在相应范围的当前位置显示内容。

Scroller属性:

horizontalScrollPolicy:水平方向是否显示滚动条(auto:自动如果超出范围才显示,on:一直显示,off:一直不显示)

verticalScrollPolicy:竖直方向是否显示滚动条(auto:自动如果超出范围才显示,on:一直显示,off:一直不显示)

下面例子,在panel中添加一个group并且设置滚动条:

 

<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" minWidth="300" minHeight="300" >
	<s:Panel x="41" y="27" width="250" height="200" >
		<s:Scroller width="100%" height="100%">
		<s:Group>
			<s:layout>
				<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
			</s:layout>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
			<s:Button label="按钮"/>
		</s:Group>
		</s:Scroller>
	</s:Panel>
</s:Application>

 运行结果如下图所示:



 需要注意的是:<s:Scroller>内只支持继承自group的容器。

 

 

 

 

最后附上一份精彩文章:Flex4容器使用的若干技巧

  • 大小: 16.1 KB
  • 大小: 8 KB
  • 大小: 7 KB
  • 大小: 7.7 KB
  • 大小: 11 KB
2
1
分享到:
评论
3 楼 skyliuxiuping 2013-12-25  
引用
使用HorizontalLayout,容器内的组件会排放在竖直方向(同一列排放),使用<s:VerticalLayout/>,容器内的组件会排放在水平方向(同一行排放)


这里写反了吧~

2 楼 lostgdi 2012-06-28  
谢谢你的信息
1 楼 mmmzzc 2011-11-29  
这么好的帖子 怎么没人支持下
收藏 支持了

相关推荐

    Flex基础培训-3-组件和布局

    5. **组件和布局容器**:布局容器是Flash Player绘制的一个矩形区域,用于组织和管理其子控件的大小和位置。Flex内置了多种布局容器,如Application、Panel、HBox、VBox、Canvas等。这些容器决定了其包含的子组件...

    FlexLayout布局-wechat-app-flexlayout-master

    `,分别代表项目放大比例、缩小比例和基础大小。 - `flex-grow`:项目放大比例,确定剩余空间如何分配。 - `flex-shrink`:项目缩小比例,确定负空间如何分配。 - `flex-basis`:项目的基础大小,可以是长度值或`...

    跟我StepByStep学FLEX教程------王一松

    - **LayoutManager介绍**:LayoutManager负责布局容器内的子组件。 - **具体实现**:例如使用VBoxLayoutManager来垂直排列子组件。 #### 15. Demo8:样式和主题 - **样式系统**:理解Flex样式系统的工作原理。 - *...

    Flex布局之关于组件的大小

    这两个属性分别限制了Flex组件的最大和最小宽度。当组件的宽度受到外部因素(如容器的大小)的影响时,它们会确保组件不会超出或低于设定的边界。 #### 3. *explicitWidth 这是一个显式宽度属性,意味着它是明确...

    flex组件时间轴组件

    综上所述,Flex组件时间轴是一个结合了Flex布局灵活性和时间序列信息展示的高效工具。通过掌握Flex布局原理和实践,开发者可以创建出功能强大且用户体验良好的时间轴组件,满足不同应用场景的需求。在实际开发中,...

    Web-前端教程05 Flex 布局大法.zip

    Flex布局,全称为“Flexible Box”,也称作弹性盒布局,是现代Web开发中的一个核心概念,用于构建响应式和动态布局。这个布局模式在HTML5时代被引入,旨在解决传统CSS布局方式(如浮动、定位)在处理复杂网页结构时...

    Flex开发实例--学习必备

    根据给定的文件信息,我们可以总结出一系列关于Flex开发的基础知识点和特定实例,适用于初学者。以下是详细的知识点概述: ### Flex开发基础 #### 1. Flex简介 - **Flex** 是一种开源框架,用于构建高质量的Web...

    弹性布局-flex布局.zip

    在传统布局模式下,元素的尺寸和位置往往受到固定宽度和高度的限制,而Flex布局则允许元素根据容器大小动态调整自身尺寸和顺序,从而实现更高效的响应式设计。 **一、Flex容器** 1. **启用Flex布局:** 使用`...

    flex组件详细介绍

    在提供的文档"flex组件详细介绍.doc"中,应包含更多关于Flex布局组件的实际应用,如导航栏、卡片式布局、网格系统等,每个组件都配有示例代码和对应的效果图,让你能够直观理解并立即应用。 通过深入理解Flex布局,...

    前端移动Web第二天:Flex伸缩布局-携程首页案例.zip

    此外,通过设置`flex-grow`, `flex-shrink`和`flex-basis`这三个Flex项目的属性,可以控制它们在可用空间中的扩展、收缩和基础大小。 总的来说,通过Flex布局,携程首页能够实现响应式设计,保证在不同分辨率和屏幕...

    flex3.0源码-3

    4. **布局管理**:Flex的布局管理器负责决定组件在容器中的位置和大小。通过源码,我们可以学习如何创建自定义布局,以适应不同的界面需求。 5. **皮肤和样式**:Flex允许开发者自定义组件的外观,这在源码层面表现...

    flex组件

    标题中的“flex组件”指的是在前端开发中广泛使用的Flex布局技术。Flex布局,全称Flexible Box,是一种用于处理容器中子元素布局的CSS3模块。它允许开发者在不同尺寸的设备上灵活地调整元素的大小和位置,尤其适用于...

    flex 实例 ----示波器的制作

    在创建示波器应用时,我们可能会使用Flex提供的各种组件,如Canvas,它是可以绘制图形的基础容器。Canvas允许我们在其上执行绘图操作,这对于模拟示波器的波形显示至关重要。我们还需要用到Timeline类,它可以帮助...

    flex容器的布局,图片样式效果设计

    在Web开发领域,Flex容器的布局是构建动态和响应式用户界面的重要技术。Flex布局,全称为Flexible Box布局,是CSS3的一种布局模式,旨在解决传统盒模型在处理复杂、多列或响应式布局时的局限性。它允许开发者轻松...

    flex组件介绍

    Flex组件是构建Flex应用程序的基础元素,它们可以被看作是预定义的UI(用户界面)构建块。组件通常包括可视元素和非可视元素,可视元素如按钮、文本框等,而非可视元素如数据提供者或事件处理器。Flex组件具有高度的...

    flex组件的所有源文件

    总的来说,“flex组件的所有源文件”压缩包是学习和开发基于Flex布局的Web应用的重要资源。通过研究这些源代码,开发者可以深入了解Flex布局的工作原理,并将其应用到实际项目中,创建出响应迅速、布局灵活的用户...

    微信小程序flex布局demo

    一、Flex布局基础 1. Flex容器:在CSS中,一个元素如果设置了`display: flex`或`display: inline-flex`,那么这个元素就成为了一个Flex容器。在微信小程序中,WXML结构中的view元素可以通过设置样式实现Flex布局。 ...

    flex组件应用

    本教程将深入探讨Flex组件的使用,结合源代码实例,帮助你更好地理解和应用这些概念。 1. Flex容器 - 定义:Flex容器是包含一个或多个Flex项目的元素,通过设置`display`属性为`flex`或`inline-flex`来开启Flex...

Global site tag (gtag.js) - Google Analytics