深入浅出ExtJS 第六章 布局

  1 6.1 布局的用途
  2   //决定把什么东西放到什么位置;
  3   var vieport = new Ext.Viewport({
  4     layout:‘border‘,      //使用BorderLayout的布局方式(边界布局);可以自动检测浏览器的大小变化和自动调整布局中每个部分的大小;
  5     items:[{
  6       region:‘north‘,     //指定组件的具体位置;
  7       height:40,
  8       html:‘<h1>顶部</h1>‘
  9     },{
 10       region:‘west‘,
 11       width:100,
 12       html:‘<p>左侧区域</p>‘
 13     },{
 14       region:‘center‘,
 15       html:‘主要内容‘
 16     }]
 17   });
 18   //Ext的所有布局都是从Ext.Container开始的,Ext.Container的父类是Ext.BoxComponent;
 19   //Ext.BoxComponent是一个盒子组件,可以定义宽度/高度和位置等;
 20
 21   //Ext.Container及其子类
 22   >.Ext.Container     //Ext.Container的子类都可以用layout对内部的items进行布局;
 23     >.Ext.Viewport    //页面整体布局;
 24     >.Ext.Panel       //嵌套布局;
 25       >.Ext.TabPanel
 26       >.Ext.Tip
 27       >.Ext.Window    //嵌套布局;
 28       >.Ext.form.FieldSet   //表单布局;
 29       >.Ext.form.FormPanel  //表单布局;
 30       >.Ext.tree.TreePanel
 31       >.Ext.grid.GridPanel
 32         >.Ext.grid.EditorGridPanel
 33         >.Ext.grid.PropertyGrid
 34
 35   //所有布局类也有一个共同的超类Ext.layout.ContainerLayout
 36   //凡是该超类的子类都可以对Ext.Container及其子类进行布局定义;
 37   >.Ext.layout.ContainerLayout    //容器布局
 38     >.Ext.layout.AnchorLayout     //锚点布局
 39       >.Ext.layout.AbsoluteLayout //绝对定位布局
 40       >.Ext.layout.FormLayout     //表单布局
 41     >.Ext.layout.BorderLayout     //边框布局
 42     >.Ext.layout.ColumnLayout     //分列布局
 43     >.Ext.layout.FitLayout        //自适应布局
 44       >.Ext.layout.Accordion      //折叠布局
 45       >.Ext.layout.CardLayout     //卡片布局
 46     >.Ext.layout.TableLayout      //表格布局
 47
 48 6.2 最简单的布局--FitLayout
 49   //自动适应页面大小
 50   Ext.onReady(function(){
 51     var store = new Ext.data.ArrayStore({
 52       fields:[‘id‘,‘name‘,‘desc‘],
 53       data:[[‘1‘,‘name1‘,‘desc1‘]]        //数据存储器;
 54     });
 55
 56     var grid = new Ext.grid.GridPanel({   //创建带数据的表格;
 57       title:‘grid‘,
 58       viewConfig:{forceFit:true},
 59       store:store,
 60       columns:[
 61         {header:‘id‘,dataIndex:‘id‘},
 62         {header:‘名称‘,dataIndex:‘name‘},
 63         {header:‘描述‘,dataIndex:‘desc‘}
 64       ],
 65       tbar:new Ext.Toolbar([‘添加‘,‘修改‘,‘删除‘]),
 66       bbar:new Ext.PagingToolbar({
 67         pageSize:15,
 68         store:store
 69       })
 70     });
 71
 72     var viewport = new Ext.Viewport({
 73       layout:‘fit‘,   //指向自适应布局;
 74       items:[grid]    //将表格引入布局;
 75     });
 76   });
 77
 78 6.3 常用的边框布局--BorderLayout
 79   //FitLayout每次只能使用一个子组件;而现实中我们使用最多的是Ext.layout.BorderLayout布局;
 80   var viewport = new Ext.Viewport({
 81     layout:‘border‘,  //指向为BorderLayout布局;
 82     items:[
 83       {region:‘north‘,html:‘north‘,height:120}, //region:指定组件的位置;html:组件内容;
 84       {region:‘south‘,html:‘south‘,height:30},
 85       {region:‘west‘,html:‘west‘,width:40},
 86       {region:‘east‘,html:‘east‘,width:100},
 87       {region:‘center‘,html:‘center‘}       //center的大小是其他4个部分设置好之后计算出来的;不可以省略;
 88     ]
 89   });
 90
 91 6.3.1 设置子区域的大小
 92   //可以直接设置north与south的高度和west与east的宽度;
 93
 94 6.3.2 使用split并限制它的的范围
 95   //使用split参数,用户可以自行拖放来改变某一个区域的大小;
 96   //使用minSize和maxSize将限制用户拖放的范围;
 97   var viewport = new Ext.Viewport({
 98     layout:‘border‘,
 99     items:[
100       {region:‘north‘,html:‘north‘,split:true},         //顶部可以上下拖动改变大小;
101       {region:‘west‘,html:‘west‘,width:100,split:true,minSize:80,maxSize:120},
102       //左侧可以左右拖动改变大小; 但宽度的范围在80~120之间;
103       {region:‘center‘,html:‘center‘}
104     ]
105   });
106
107 6.3.3 子区域的展开和折叠--collapsible
108   //属性collapsible:true;这个属性激活了区域折叠功能;
109   //title:‘west‘;折叠区域的标题;必须跟collapsible一起设置;
110   items:[
111     {region:‘north‘,html:‘north‘,heith:100,title:‘顶部‘,collapsible:true},
112     ...
113   ]
114
115 6.4 制作伸缩菜单布局--Accordion(折叠布局)
116   //BorderLayout布局下嵌套的Accordion布局;
117   var viewport = new Ext.Viewport({
118     layout:‘border‘,        //第一层是BorderLayout布局;
119     items:[{
120       region:‘west‘,        //子组件左侧区域;
121       width:200,
122       layout:‘accordion‘,   //子组件是Accordion(折叠)布局;
123       split:true,
124       layoutConfig:{        //布局配置信息;
125         titleCollapse:true, //点击标题也可折叠;
126         animate:true,       //折叠动画;
127         activeOnTop:false   //打开的组件是否置顶;
128       },
129       items:[{              //孙组件;折叠布局;
130         title:‘第一栏‘,
131         html:‘第一栏‘
132       },{
133         title:‘第二栏‘,
134         html:‘第二栏‘
135       }]
136     },{
137       region:‘center‘,      //子组件center区域;
138       html:‘center区域‘
139     }]
140   });
141
142 6.5 实现操作向导的布局--CardLayout
143   //为CardLayout配置几个子面板,每次只显示其中一个;
144   var viewport = new Ext.Viewport({
145     layout:‘border‘,
146     items:[{
147       region:‘west‘,
148       id:‘wizard‘,
149       width:200,
150       title:‘xx向导‘,
151       layout:‘card‘,
152       activeItem:0,
153       bodyStyle:‘padding:15px‘,
154       defaults:{
155         border:false
156       },
157       bbar:[{
158         id:‘move-prev‘,
159         text:‘上一步‘,
160         handler:function(){
161             navHandler(-1);
162         },
163         disabled:true
164       },‘->‘,{
165         id:‘move-next‘,
166         text:‘下一步‘,
167         handler:function(){
168             navHandler(1);
169         },
170       }],
171       items:[{
172         id:‘card-0‘,
173         html:‘<h1>欢迎使用向导</h1><p>1/3</p>‘
174       },{
175         id:‘card-1‘,
176         html:‘<p>2/3</p>‘
177       },{
178         id:‘card-2‘,
179         html:‘<p>完成</p>‘
180       }]
181     },{
182         region:‘center‘,
183         split:true,
184         border:true
185     }]
186   });
187   //设置navHandler函数  (带注释!)
188   var navHandler = function(direction){
189     var wizard = Ext.getCmp(‘wizard‘).layout;
190     var prev = Ext.getCmp(‘move-prev‘);
191     var next = Ext.getCmp(‘move-next‘);
192     var activedId = wizard.activeItem.id;
193     if(activeId == ‘card-0‘){
194       if(direction == 1){
195         wizard.setActiveItem(1);
196         prev.setDisabled(false);
197       }
198     }else if(activeId == ‘card-1‘){
199       if(direction == -1){
200         wizard.setActiveItem(0);
201         prev.setDisabled(true);
202       }else{
203         wizard.setActiveItem(2);
204         next.setDisabled(true);
205       }
206     }else if(activeId == ‘card-2‘){
207       if(direction == -1){
208         wizard.setActiveItem(1);
209         next.setDisabled(false);
210       }
211     }
212   };
213
214 6.6 控制位置和大小的布局--AnchorLayout和AbsolluteLayout
215   //AnchorLayout提供了灵活的布局方式,既可以为items中的每个组件指定与总体布局大小的差值;也可以设置一个比例使子组件可以根据整体自行计算本身的大小;
216   >1.使用百分比进行配置
217   //设置某一个子组件占整体长和宽的百分比;
218   var viewport = new Ext.Viewport({
219     layout:‘anchor‘,        //设置接下来的子组件都为AnchorLayout布局;
220     items:[{
221       title:‘panel1‘,
222       html:‘panel1‘,
223       anchor:‘50% 50%‘      //panel1组件占总体宽度的50%和高度的50%;
224     },{
225       title:‘panel2‘,
226       html:‘panel2‘,
227       anchor:‘80%‘          //panel2组件占总体宽度的80%,高度自适应;
228     }]
229   });
230   >2.设置与右侧和底部的边距;
231   var viewport = new Ext.Viewport({
232     layout:‘anchor‘,
233     items:[{
234       title:‘panel1‘,
235       html:‘panel1‘,
236       anchor:‘-50 -200‘     //组件与右侧和底部的相对(绝对)距离;
237     },{
238       title:‘panel2‘,
239       html:‘panel2‘,
240       anchor:‘-100‘         //组件与右侧的距离;
241     }]
242   });
243   >3.side布局;
244   //在设置父组件和布局内部子组件都设置好width/height和anchorSize属性的前提下;AnchorLayout会记录布局整体与子组件在大小上的差值,为以后调整布局提供依据;
245   var viewport = new Ext.Viewport({
246     layout:‘anchor‘,
247     anchorSize:{width:400,height:300},
248     //这是一个包含宽度和高度信息的JSON对象;以此作为以后计算差值的基准;
249     items:[{
250       title:‘panel1‘,
251       html:‘panel1‘,
252       width:200,
253       height:100,
254       anchor:‘r b‘
255     },{
256       title:‘panel2‘,
257       html:‘panel2‘,
258       width:100,
259       height:200,
260       anchor:‘r b‘
261     }]
262   });
263   //AnchorLayout首先获得父组件的宽度/高度,以及每个子组件的宽度/高度,然后将子组件与父组件的宽度/高度之差分别保存起来;根据改变后父组件的大小,计算出子组件当前的宽度和高度;
264   >4.同时使用百分比和边距
265   var viewport = new Ext.Viewport({
266     layout:‘anchor‘,
267     items:[{
268       title:‘panel1‘,
269       html:‘panel1‘,
270       anchor:‘-100 40%‘     //组件距右侧100px不变,高度是整体的40%;
271     },{
272       title:‘panel2‘,
273       html:‘panel2‘,
274       anchor:‘-200 60%‘     //同上;
275     }]
276   });
277   >5.利用AbsoluteLayout进行绝对定位
278   //AbsoluteLayout是AnchorLayout的一个子类;继承了AnchorLayout的所有特性;
279   //AnchorLayout布局下的子组件都是自上而下竖直排列的;而AbsoluteLayout正是可以解决这个问题;
280   var viewport = new Ext.Viewport({
281     layout:‘absolute‘,
282     //以下组件进行绝对定位;并使用AnchorLayout确定每个组件的相对大小;
283     items:[{
284       title:‘panel1‘,
285       html:‘panel1‘,
286       x:50,                 //子组件左上角距父组件的距离;
287       y:0,
288       anchor:‘-200 40%‘     //子组件相对于父组件的大小;
289     }]
290   });
时间: 2024-08-04 18:22:44

深入浅出ExtJS 第六章 布局的相关文章

Android的学习第六章(布局二--RelativeLayout)

今天我们来说一下Android布局中的Relativelayout布局(相对布局) 根据英译过来意思是相对布局,很容易理解,这一样布局使用的是元素与元素之间的微调做到布局的 含义:通过元素与元素之间的微调进行布局; 好处:可以进行细节上的处理 坏处:元素之间的关系过强,可能一个元素的改变其他元素的情况发生 我们看一下下面的一个代码布局案例 <!-- 第一个相对布局这里我们可以当做最大父元素 设置了宽度高度占满父元素 --> <RelativeLayout xmlns:android=&q

Android的学习第六章(布局一LinearLayout)

今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面进行基本设置使用 重要属性:android:orientation 值:horizontal 元素水平摆放  |  vertical 元素垂直摆放 看代码: <!-- 第一个线性布局, 我们可以视为html中的div,用于对于整个界面进行布局 这里面 xmlns:android和xmlns:tool

Android的学习第六章(布局一TableLayout)

今天我们来简单的说一下Android不居中的TableLayout布局(表格布局) 表格布局的意思就是将我们的布局看做为一个表格,主要用于对控件进行整齐排列 我们看一个简单的案例 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=&q

深入浅出ExtJS 第四章 表单与输入控件(未完)

1 4.1 制作表单 2 var form = new Ext.form.FormPanel({ 3 title:'form', 4 defaultType:'textfield', 5 buttonAlign:'center', 6 frame:true, 7 width:220, 8 fieldDefaults:{ 9 labelAlign:'right', 10 labelWidth:70 11 }, 12 tiems:[{ //子组件; 13 fieldLabel:'文本框' //文本框

深入浅出ExtJS 第三章 表格控件(未完)

1 3.1 表格的特性简介 2 >.Ext中的表格功能:包括排序/缓存/拖动/隐藏某一列/自动显示行号/列汇总/单元格编辑等实用功能; 3 >.表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,其xtype为grid; 4 >.表格控件必须包含列(columns)定义信息,并指定表格的数据存储器(Ext.data.Store); 1 3.2 制作一个简单的表格 2 >1.列的定义是一个JSON数组,它是整个表格的列模型,应该首先创建; 3 var colu

无废话ExtJs 入门教程十六[页面布局:Layout]

无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distribution;layout] 对事物的全面规划和安排,布:陈设:设置. 我对布局理解是“把**东西放在**位置显示”[动词]. ok,我们这节课就讲一下怎么样把 ExtJs 的组件,放到我们想放置的位置. 一.常用布局 (1)ContainerLayout:默认布局方式,其他布局继承该类进行扩展功能.显示:

深入浅出Zabbix 3.0 -- 第六章 监控项配置与管理

第六章 监控项配置与管理 Zabbix系统中监控项(Items)的定义和管理非常重要,所有的监控指标都是通过定义不同的监控项收集数据.Zabbix通过主机作为一个逻辑单元组织和管理监控项,所有的监控项都必须属于某个主机,且在同一主机中只能有一个唯一的监控项存在. 6.1监控数据 Zabbix 不同于与大多数其他监控解决方案的一个重要特征是Zabbix通过监控项从被监控对象收集的数据是原始数据,而不是告警或状态的更新数据.大多数监控方案中,不管是通过agent或其他方法收集到监控数据后,会对该数据

ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Desktop的组成部分之一,ArcMap用于数据的浏览.编辑.显示.查询.地图排版等.ArcMap和ArcCatalog一起构成了完整的数据处理与管理分析的功能.在前一章中已经介绍了ArcCatalog的使用,本章中将介绍ArcMap的使用.本章的例子依然使用第4章里的小区平面图示例,但是将从原理的角度做更加

Laxcus大数据管理系统2.0(8)- 第六章 网络通信

第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的网络资源,获得最大化的使用效率,我们根据大数据网络环境的特点,设计了一套专属网络通信协议,以及在此协议基础上实现的多套网络通信方案,它们共同组成了Laxcus集群的网络通信基础.本章将以TCP/IP协议为起点,介绍与网络通信有关的各个组成部分. 6.1 FIXP协议 Laxcus采用FIXP协议通信