ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)

  一、布局的来源( Why we need layout

页面上显示的各个元素往往是嵌套的,这些元素在页面上的摆放需要某些元素能够盛放其他一些元素,因此就有了Container(“容器”,一种特殊组件)和Component(一般组件),Container能够盛放其他Container和一般的Component

    这种元素间的关系使得组件呈现层级关系。下图 展示了 ExtJS4.x 中组件间层级关系一种实例。

ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)_第1张图片

    既然组件间呈现层级关系,Container中能盛放其他ContainerComponent,那么怎么呈现呢?呈现的样子是什么?是从左到右一个一个摆放还是从上到下一个一个摆放?是按照东西南北中来摆放还是随意摆放?这些就是layout(布局)的责任范畴了,layout能够设置一个容器中的各个元素怎么放置。当然,layout不仅仅在ExtJS中出现,一切图形界面编程中都涉及它!

二、ExtJS4.x中的布局简介(An brief introduction to layout in ExtJS4.x

    ExtJS4.x为页面布局提供了多种方案,有按照“东西南北中”方位位置来摆放元素的border布局,也有元素自适应摆放的fit布局,还有从左到右按列摆放元素的hbox布局和从上到下按行摆列元素的vbox布局……ExtJS4.x为页面布局提供了多种解决方案,如下表所示。

名称

对应的类

absolute

Ext.layout.container.Absolute

accordion

Ext.layout.container.Accordion

anchor

Ext.layout.container.Anchor

autoautocontainer

Ext.layout.container.Auto

autocomponent

Ext.layout.component.Auto

border

Ext.layout.container.Border

box

Ext.layout.container.Box

card

Ext.layout.container.Card

checkboxgroup

Ext.layout.container.CheckboxGroup

column

Ext.layout.container.Column

container

Ext.layout.container.Container

fit

Ext.layout.container.Fit

form

Ext.layout.container.Form

hbox

Ext.layout.container.HBox

table

Ext.layout.container.Table

ux.center

Ext.ux.layout.Center

vbox

Ext.layout.container.VBox

 

    这17中布局方案是在长期界面编程中形成的经典方法,我们应该先学习了解各种布局的功能、特点、使用场合,然后根据自己的需求选择使用。例如,border布局适合于将页面分成“东西南北中”五部分来摆放元素的场合(当然,不必每部分都用到,例如可以只使用其中的centersouth部分),它和java Swing中的border布局几乎一致。

       下面以fitborderhboxvboxcolumn这五种布局来简单介绍,并配以实例。

1fit布局

       fit布局是最简单的布局,只适合于包含单一元素的容器,例如一个panel(面板)只包含另一个panel。使用fit布局时,被包含的元素会充满其父容器。要使用fit布局,只要在容器中的layout配置中指定‘fit’即可。

 实例代码:

Ext.create('Ext.panel.Panel', {
    title: 'Fit Layout',
    width: 300,
    height: 150,
    layout:'fit',
    items: {
       xtype: panel, //可有可无,在Ext.panel.Panel中默认的元素也是panel
       title: 'Inner Panel',   //元素的标题
        html: 'This is the inner panel content',  //内容
        bodyPadding: 20,  //定义padding样式
        border: false  //panel元素无边界
    },
    renderTo: Ext.getBody()
});

实例展示图

ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)_第2张图片

2border

    border布局非常丰富,同时也比较复杂。它提供“东西南北中”五部分供盛放元素,使得容器可以盛放嵌套panel,同时也使得部分与部分之间可以有工具栏,也可以使各部分之间能够关闭(缩至最小)。要使用border布局,只要在容器中的layout配置中指定‘border’即可。

实例代码:

Ext.create('Ext.panel.Panel', {
    width: 500,
    height: 400,
    title: 'Border Layout',
    layout: 'border',
    items: [{
        title: 'South Region is resizable',
        region: 'south',     // 配置放置区域为south
        xtype: 'panel',
        height: 100,
        split: true,
        margins: '0 5 5 5'  //margins中个数字对应的方位一次是北东南西
    },{
        // xtype: 'panel' implied by default
        title: 'North Region is collapsible',
        region:'north',
        xtype: 'panel',
        margins: '5 5 0 5',
        height: 100,
        collapsible: true,   // 允许收缩
        id: 'north-region-container',
        layout: 'fit'
    },{
        // Ext.panel.Panel中默认元素类型为xtype:panel
        title: 'West Region is collapsible',
        region:'west',
        xtype: 'panel',
        margins: '5 0 0 5',
        width: 100,
        collapsible: true,
        id: 'west-region-container',
        layout: 'fit'
    },{
        // xtype: 'panel' implied by default
        title: 'East Region is collapsible',
        region:'east',
        xtype: 'panel',
        margins: '5 5 0 0',
        width: 100,
        collapsible: true,
        id: 'east-region-container',
        layout: 'fit'
    },{
        title: 'Center Region',
        region: 'center',//中部区域是必须的,它没有宽高配置,也不需要
        xtype: 'panel',
        layout: 'fit',
        margins: '5 5 5 5'
    }],
    renderTo: Ext.getBody()
});
实例展示图:

ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)_第3张图片

 

3hbox

       hbox布局使得容器中各个元素水平排列,一个挨一个。如果在items中配置元素时指定各个元素的宽度(可以使用绝对数字如200,也可以使用百分比),则显示时将按照指定的宽度显示;如果使用了flex配置,则按照flex比例来显示宽度;如果没有指定,则自动使用builtin(内置)规则安排各个元素的宽度。但是在高度上,则只能使用绝对数字而不能使用百分比。在使用hbox时,可以指定元素align(对齐)规则,top(顶部对齐)、middle(中部对齐)、bottom(底部对齐)、stretch(垂直方向上充满整个容器)、stretch(垂直方向上按照高度最高的对齐)。

实例代码:

Ext.create('Ext.Panel', {
    width: 500,
    height: 300,
    title: "HBoxLayout Panel",
    layout: {
        type: 'hbox',     //指定为hbox布局
        align: 'stretch'  //指定元素的高将充满容器的垂直空间
    },
    renderTo: document.body,
    items: [{
        xtype: 'panel',
        title: 'Inner Panel One',
        flex: 2
    },{
        xtype: 'panel',
        title: 'Inner Panel Two',
        flex: 1
    },{
        xtype: 'panel',
        title: 'Inner Panel Three',
        flex: 1
    }]
});

实例展示图:

ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)_第4张图片

 

4vbox

       hbox相对,vbox按照垂直方向来摆放元素,其他属性与hbox差不多。

实例代码:

Ext.create('Ext.Panel', {
    width: 400,
    height: 300,
    title: "VBoxLayout Panel",
    layout: {
        type: 'vbox',    //指定为vbox布局
        align: 'center'  //指定各元素将中间对齐
    },
    renderTo: document.body,
    items: [{
        xtype: 'panel',
        title: 'Inner Panel One',
        width: 250,
        flex: 2
    },
    {
        xtype: 'panel',
        title: 'Inner Panel Two',
        width: 250,
        flex: 4
    },
    {
        xtype: 'panel',
        title: 'Inner Panel Three',
        width: '50%',
        flex: 4
    }]
});

实例展示图:

ExtJS 4.x中的布局(layouts in ExtJS 4.x)(一)_第5张图片

 

    如开头所述,ExtJS4.x中一共有17中布局,这里仅仅介绍了其中的4中,在后面的学习和使用中会继续更新!

参考:ExtJS 官方文档http://docs.sencha.com/extjs/4.2.2/中布局、组件等文档

你可能感兴趣的:(ExtJs4.x,布局(layout),组件(component))