布局

布局

所谓布局就是指容器组件中子元素的分布、排列组合方式。Ext 的所有容器组件都支持而局操作,每一个容器都会有一个对应的布局,布局负责管理容器组件中子元素的排列、组合及渲染方式等。

ExtJS 的布局基类为Ext.layout.ContainerLayout,其它布局都是继承该类。ExtJS 

容器组件包含一个layout layoutConfig 配置属性,这两个属性用来指定容器使用的布局及布局的详细配置信息,如果没有指定容器组件的layout 则默认会使用ContainerLayout 作为布局,该布局只是简单的把元素放到容器中,有的布局需要layoutConfig 配置,有的则不需要layoutConfig 配置。看代码:

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

width:400,

height:200,

layout:"column",

items:[{columnWidth:.5,

title:"面板1"},

{columnWidth:.5,

title:"面板2"}]

});

});

上面的代码我们创建了一个面板Panel,Panle 是一个容器组件,我们使用layout 指定该

面板使用Column 布局。该面板的子元素是两个面板,这两个面板都包含了一个与列布局相

关的配置参数属性columnWidth,他们的值都是0.5,也就是每一个面板占一半的宽度。

Ext中的一些容器组件都已经指定所使用的布局,比如TabPanel使用card布局、

FormPanel使用form布局,GridPanel中的表格使用column布局等,我们在使用这些组件的

时候,不能给这些容器组件再指定另外的布局。

ExtJS2.0 一共包含十种布局,常用的布局有border、column、fit、form、card、tabel

等布局,下面我们分别对这几种布局作简单的介绍。

A: Border 布局

Border 布局由类Ext.layout.BorderLayout定义,布局名称为border。该布局把容器分成东南西北中五个区域,分别由east,south, west,north, center来表示,在往容器中添加子元素的时候,我们只需要指定这些子元素所在的位置,Border布局会自动把子元素放到布局指定的位置。看下面的代码:

Ext.onReady(function(){

new Ext.Viewport({

layout:"border",

items:[{region:"north",

height:50,

title:"顶部面板"},

{region:"south",

height:50,

title:"底部面板"},

{region:"center",

title:"中央面板"},

{region:"west",

width:100,

title:"左边面板"},

{region:"east",

width:100,

title:"右边面板"}

]

});

});

B: Column 列布局

Column 列布局由Ext.layout.ColumnLayout 类定义,名称为column。列布局把整个容器组件看成一列,然后往里面放入子元素的时候,可以通过在子元素中指定使用columnWidthwidth 来指定子元素所占的列宽度。columnWidth 表示使用百分比的形式指定列宽度,而width 则是使用绝对象素的方式指定列宽度,在实际应用中可以混合使用两种方式。看下面的代码:

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

title:"容器组件",

layout:"column",

width:500,

height:100,

items:[{title:"列1",width:100},

{title:"列2",width:200},

{title:"列3",width:100},

{title:"列4"}

]

}

);

});

上面的代码在容器组件中放入了四个元素,在容器组件中形成4 列,列的宽度分别为

100,200,100 及剩余宽度

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

title:"容器组件",

layout:"column",

width:500,

height:100,

items:[{title:"列1",columnWidth:.2},

{title:"列2",columnWidth:.3},

{title:"列3",columnWidth:.3},

{title:"列4",columnWidth:.2}

]

}

);

});

注意columnWidth 的总和应该为1

在实际应用中还可以混合使用

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

title:"容器组件",

layout:"column",

width:500,

height:100,

items:[{title:"列1",width:200},

{title:"列2",columnWidth:.3},

{title:"列3",columnWidth:.3},

title:"列4",columnWidth:.4}

] }

);

});

D: Form 布局

Form 布局由类Ext.layout.FormLayout 定义,名称为form,是一种专门用于管理表单中输入字段的布局,这种布局主要用于在程序中创建表单字段或表单元素等使用。看下面的代码:

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

title:"容器组件",

width:300,

layout:"form",

hideLabels:false,

labelAlign:"right",

height:120,

defaultType: 'textfield',

items:[

{fieldLabel:"请输入姓名",name:"name"},

{fieldLabel:"请输入地址",name:"address"},

{fieldLabel:"请输入电话",name:"tel"}

] }

);

});

上面的代码创建了一个面板,面板使用Form 布局,面板中包含三个子元素,这些子元

素都是文本框字段,在父容器中还通过hideLabelslabelAlign 等配置属性来定义了是否隐藏标签、标签对齐方式等。

可以在容器组件中把hideLabels 设置为true,这样将不会显示容器中字段的标签了

在实际应用中,Ext.form.FormPanel 这个类默认布局使用的是Form 布局,而且FormPanel

还会创建与

 标签相关的组件,因此一般情况下我们直接使用FormPanel 即可。上面

的例子可改写成如下的形式:

Ext.onReady(function(){

new Ext.form.FormPanel({

renderTo:"hello",

title:"容器组件",

width:300,

labelAlign:"right",

height:120,

defaultType: 'textfield',

items:[

{fieldLabel:"请输入姓名",name:"name"},

{fieldLabel:"请输入地址",name:"address"},

{fieldLabel:"请输入电话",name:"tel"}

] }

);

});

程序结果与前面使用Ext.Panel 并指定form 布局的一样

E: Accordion 布局

Accordion 布局由类Ext.layout.Accordion 定义,名称为accordion,表示可折叠的布局,也就是说使用该布局的容器组件中的子元素是可折叠的形式。来看下面的代码:

Ext.onReady(function(){

new Ext.Panel({

renderTo:"hello",

title:"容器组件",

width:500,

height:200,

layout:"accordion",

layoutConfig: {

animate: true

},

items:[{title:"子元素1",html:"这是子元素1中的内容"},

{title:"子元素2",html:"这是子元素2中的内容"},

{title:"子元素3",html:"这是子元素3中的内容"}

] }

);

});

上面的代码定义了一个容器组件,指定使用Accordion 布局,该容器组件中包含三个子元素,在layoutConfig 中指定布局配置参数animate true,表示在执行展开折叠时是否应用动画效果。

点击每一个子元素的头部名称或右边的按钮,则会展开该面板,并收缩其它已经展开的面板

F: Table 布局

Table 布局由类Ext.layout.TableLayout 定义,名称为table,该布局负责把容器中的子元素按照类似普通html 标签

Ext.onReady(function(){

var panel=new Ext.Panel({

renderTo:"hello",

title:"容器组件",

width:500,

height:200,

layout:"table",

layoutConfig: {

columns: 3

},

items:[{title:"子元素1",html:"这是子元素1中的内容",rowspan:2,height:100},

{title:"子元素2",html:"这是子元素2中的内容",colspan:2},

{title:"子元素3",html:"这是子元素3中的内容"},

{title:"子元素4",html:"这是子元素4中的内容"}

] }

);

});

上面的代码创建了一个父容器组件,指定使用Table 布局,layoutConfig 使用columns

指定父容器分成列,子元素中使用rowspan colspan 来指定子元素所横跨的单元格数。

除了前面介绍的几种布局以外, Ext2.0 中还包含其它的Ext.layout.AbsoluteLayout

Ext.layout.AnchorLayout 等布局类,这些布局主要作为其它布局的基类使用,一般情况下我们不会在应用中直接使用。另外,我们也可以继承10 种布局类的一种,来实现自定义的布局。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容