extjs中的flex_Extjs4中的布局

布局用于定义容器如何组织内部子元素和控制子元素的大小。在一个应用程序中,作为定义容器的组织形式,布局是一个十分重要的组件。是显示单个子元素?还是垂直或水平显示多个子元素?这些均由布局来定义。并且布局将占用应用程序大部分的呈现时间。Extjs4中对布局进行了重大的修整。下面我们将学习并熟悉Extjs中的布局。

本章目录如下:

3.1. Extjs 4 布局

Extjs4对布局进行了重大的修整。布局引擎已被重写,但API仍保持原样,从而使得布局是向后兼容的。当然所生成的HTML标签也作出了修整。

Extjs2中引入了布局这一特性。当时其具有良好的性能和速度,但欠缺灵活性。后来的版本增强了灵活性却牺牲了性能(译者语:Extjs3在性能方面确实令不少人望而却步啊!)。在Extjs4中对加载速度、性能和灵活性等方面都作出了改进,通过下面的图例我们可以看到改进结果:

除了上述内容,Extjs4还引入两类型的布局:Container 布局 和 Component 布局。

Component 布局:负责组织组件的HTML元素;

包括:Dock布局、Toolbar布局、Field布局、TriggerField布局。

Container 布局:负责容器内容Extjs元素和调整Extjs元素的大小。

包括:Border布局、Box布局、Fit布局等等。

(译者语:如果接触过Extjs旧有版本的朋友应该对Container布局不陌生了,而Component布局是Extjs4独有的,但不由开发人员来设置、调用,而是框架中的组件已内置好的。)

3.2. Container布局

首先我们来看看Container布局的层级图吧!

3.2.1. Auto布局

当没有为容器(Container或其子类实例)配置layout配置项时就会使用Auto布局。

特点:

1. 容器子元素不随容器大小变化而变化;

2. 容器子元素按添加到容器的顺序自上而下排列。

实例:

var panel1 = Ext.create('Ext.panel.Panel', {

title: 'Panel 1',

html: 'Panel 1',

height: 60,

width: 100

});

var panel2 = Ext.create('Ext.panel.Panel', {

title: 'Panel 2',

html: 'Panel 2',

height: 80,

width: 60

});

var panel3 = Ext.create('Ext.panel.Panel', {

title: 'Panel 3',

html: 'Panel 3',

height: 65,

width: 100

});

var panel4 = Ext.create('Ext.panel.Panel', {

title: 'Panel 4',

html: 'Panel 4',

height: 70,

width: '90%'

});

var auto = Ext.create('Ext.window.Window', {

title: 'Auto Layout',

width: 100,

height: 320,

//layout:'auto',

defaults: {

bodyStyle: 'padding:15px'

},

items: [panel1, panel2, panel3, panel4]

});

上述实例创建了四个panel组件实例并作为window组件实例的子元素。

defaults:用于统一设置其子元素的配置项。

结果如下:

1. 如果我们放大或缩小window组件实例,其内部的Panel1、Panel2、Panel3和Panel4的大小将不会随之变化;

2. Panel4中width值为90%表示该元素的宽度为父容器body宽度的90%。(在Chrome中使用百分比来设置宽度会出现没有右边框的异常)

3.2.2. Anchor布局

特点:

1. 容器子元素会随容器大小而变化;

2. 子元素按添加到容器的次序,自上而下的排列;

3. 子元素默认宽度为容器的body宽度。

4. 通过子元素的x、y配置项可设置子元素离原来位置的左边距和上边距(效果如同position:relative,top:...,left:....)

实例:

var panel1 = Ext.create('Ext.panel.Panel', {

title: 'Panel 1',

html: '100% 30%',

anchor:'100% 30%'

});

var panel2 = Ext.create('Ext.panel.Panel', {

title: 'Panel 2',

html: '80% 25%',

anchor:'80% 25%'

});

var panel3 = Ext.create('Ext.panel.Panel', {

title: 'Panel 3',

html: '-70 20%',

anchor:'-70 20%'

});

var panel4 = Ext.create('Ext.panel.Panel', {

title: 'Panel 4',

html: '-30 25%',

anchor:'-30 25%'

});

var anchor = Ext.create('Ext.window.Window', {

title: 'Anchor Layout',

width: 250,

height:300,

layout:'anchor',

defaults: {

bodyStyle: 'padding:10px'

},

items: [panel1, panel2, panel3, panel4]

});

anchor.show();

从实例我们可以知道,除了容器的layout配置项设为anchor后,若要定制子元素的布局细节就必须设置设置子元素的anchor配置项。(Ext.panel.Panel中有anchorSize这一配置项,但与布局中上述的anchor配置项功能不同,无法实现上述效果)

anchor值为字符串,若形如"80"、"-30"或"80%"表示设置子元素占容器的宽度;而形如"80 90"或"90 80%"等表示设置子元素占容器的宽度和高度。

80等正数表示子元素离父容器左内边框、上内边框的距离;

-30等负数表示子元素离父容器右内边框、下内边框的距离;

80%等百分数表示子元素占父容器宽度、高度的百分比。注意:对于高度使用百分比值时,每个子元素的最终的值都是“百分比*父容器的高度”。

改变容器大小后

3.2.3. Absolute布局

AbsoluteLayout是AnchorLayout的子类,其继承了AnchoreLayout的所有特性。并且可以设置x和y配置项来相对与父容器来定位子元素。

特点:

1. 容器子元素会随容器大小而变化;

2. 子元素默认宽度为容器的body宽度;

3. 子元素默认位置为容器的左上角(x:0,y:0),就是不设置各子元素的x、y配置项时,所有子元素会在容器的左上角重叠;

4. 子元素通过x、y配置项来设置子元素离容器左内边框、上内边框的距离。

实例:

var panel1 = Ext.create('Ext.panel.Panel', {

title: 'Panel 1',

html: 'x: 10; y: 10 - anchor: 80% 80%', /*this config option will display the given text inside the panel*/

anchor:'80% 80%',

x: 10,

y: 10

});

var absolute = Ext.create('Ext.window.Window', {

title: 'Absolute Layout',

width: 300,

height: 200,

layout:'absolute',

defaults: {

bodyStyle: 'padding:10px'

},

items: [panel1]

});

absolute.show();

注意:子元素的anchor属性,对于高度使用百分比值时,每个子元素的最终的值都是“百分比*父容器的剩余高度”,父容器的剩余高度=父容器的高度-较早添加到容器的子元素高度。所以子元素添加到容器的次序将在使用百分比设置子元素anchor属性高度时起作用。

3.2.4. HBox 布局

HBox布局组织子元素在容器内水平排列。

特点:

1. 容器子元素会随容器大小而变化;

2. 通过三个可选的配置项来组织子元

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值