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

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

页面上显示的各个元素每每是嵌套的,这些元素在页面上的摆放须要某些元素可以盛放其余一些元素,所以就有了Container(“容器”,一种特殊组件)和Component(通常组件),Container可以盛放其余Container和通常的Component html

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

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

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

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

名称 布局

对应的类 学习

absolute flex

Ext.layout.container.Absolute ui

accordion spa

Ext.layout.container.Accordion code

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()
});

实例展现图

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()
});
实例展现图:

 

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
    }]
});

实例展现图:

 

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
    }]
});

实例展现图:

 

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

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

相关文章
相关标签/搜索