布局用来描述你应用程序中组件的大小和位置,在sencha touch中,为我们提供了下面几种布局:

  1.HBox:

  HBox及horizontal box布局,我们这里将其称为水平布局,下面是一段演示代码:

 Ext.create('Ext.Container', {
fullscreen: true,
layout: 'hbox',
items: [
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});

  如上所示,凡是layout被定义为hbox的容器,它的子组件都将会在水平方向按顺序排列,并且会根据我们为子组件配置的flex属性来分配他们的空间占比.并填充满屏幕,

  在这里,我们定义了一个父容器container,并将它的layout布局属性设置为hbox,接着我们定义了两个panel子组件,他们会在水平方向上排列,

  一个输出message list,一个输出message preview,由于message list的flex值为1,message preview的flex值为2,

  那么在整个水平布局中message list的占比为1/(1+2),message preview的占比为2/(1+2),

  整体效果大致如下:

  

  2.VBox

  vbox即vertical box,我们这里将其称之为垂直布局,vbox跟hbox类似,只是将水平布局换成了垂直纵向的

  我们将上面的代码的layout属性改成vbox,如下: 

 Ext.create('Ext.Container', {
fullscreen: true,
layout: 'vbox',
items: [
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});

  那么整个容器的显示效果则变成纵向的:

  

vbox跟hbox有点类似于android原生开发中的liearnlayout布局,flex就类似于layout_weight属性;

vbox跟hbox的实现原理也比较简单,主要就是利用了css3中的flexbox布局来实现的,感兴趣的同学可以去研究下,这里我提供两个flexbox的链接:

http://bbs.9ria.com/thread-195131-1-1.html

http://www.w3cplus.com/css3/flexbox-basics.html

大家感兴趣的可以去看看

  3.Card Layout

  card layout我们这里把它称为卡片布局,顾名思义,布局layout属性定义为card的布局的容器的子组件将会像卡片一样一层层地叠加在一起,并全屏展示,最顶层的组件会覆盖其他组件,当我们需要显示其他子组件的时候我们可以通过激活的函数将其显示出来:

  

这里我们演示了一段示例代码:

  

 var panel = Ext.create('Ext.Panel', {
layout: 'card',
items: [
{
html: "First Item"
},
{
html: "Second Item"
},
{
html: "Third Item"
},
{
html: "Fourth Item"
}
]
}); panel.setActiveItem(1);

我们定义了一个panel组件,并将其定义为card布局,我们在这里给他定义了四个子组件,并通过setActiveItem(1)来激活第二个组件,

当你需要激活其中的某个子组件让其显示时可以通过setActiveItem(别名或者子组件索引)的方式让指定的组件显示出来

使用card布局的组件有一个好处就是他的子组件在被激活切换的时候可以配置系统已经定义的一些切换动画效果,具体的演示我们将会在后面的实际项目中进行演示

  layout: {
type: "card",
animation: "slide"
}

当然你也可以动态地在切换子组件的时候设置动画,如下:

  

父组件对象.animateActiveItem("viewTab", {type: "slide", direction: "right"});

  4.Fit Layout

  fit即填充的意思,fit layout的作用就是将整个容器填充到界面中全屏显示,它的作用跟设置组件的fullscreen:true是一样的,

  直接将组件的layout属性设置为:fit即可,没有太多复杂的内容,

  下面是示例代码

 var panel = Ext.create('Ext.Panel', {
width: 200,
height: 200,
layout: 'fit', items: {
xtype: 'panel',
html: 'Also 200px by 200px'
}
});

  5.Docking

  docking布局,我们这里将其称为悬停布局,跟上面的4种布局不同,docking布局是给子组件设置的,通过给子组件配置docked来实现,docked有top,bottom,left,right四种属性,分别对应上、下、左、右四个位置,相当于css中的fit position,当子组件配置了这个属性后,它将始终展现在你配置的位置并且不受父组件布局的影响,我们来看下示例代码:

  

 Ext.create('Ext.Container', {
fullscreen: true,
layout: 'hbox',
items: [
{
docked: 'top',
xtype: 'panel',
height: 20,
html: 'This is docked to the top'
},
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});

  这里我们给container的第一个子组件设置了一个docked属性,并将其设置为top,那么不管它的父组件是什么布局,它也将始终展现在界面顶部,大致效果如图:

  

  如果我们将上面代码的docked设置为left,那么它将会居左显示

 Ext.create('Ext.Container', {
fullscreen: true,
layout: 'vbox',
items: [
{
docked: 'left',
xtype: 'panel',
width: 100,
html: 'This is docked to the left'
},
{
xtype: 'panel',
html: 'message list',
flex: 1
},
{
xtype: 'panel',
html: 'message preview',
flex: 2
}
]
});

效果如下:

以上便是sencha touch中比较常用的几个布局,下一讲我们将开始通过实际的项目练习来讲解sencha touch的其他知识

  

  

sencha touch 入门系列 (九) sencha touch 布局layout的更多相关文章

  1. sencha touch 入门系列 扩展篇之sencha touch 项目打包压缩

    经常有新手同学抱怨说sencha touch的项目加载速度为什么这么慢,经常要10秒左右的时间甚至更多, 大家都知道,sencha touch开发的项目中引用了大量的js文件,当我们打开项目时,st的 ...

  2. sencha touch 入门系列 (二)sencha touch 开发准备

    这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...

  3. sencha touch 入门系列 (七)sencha touch 类系统讲解(上)

    在mvc结构的基础上,sencha touch又使用了sencha公司为extjs4开发出来的类系统,在面向对象的编程语言中,类是对对象的定义,它描述了对象所包含的大量属性和方法. 跟面向对象语言类似 ...

  4. sencha touch 入门系列 (九)sencha touch 视图组件简介

    对于一个普通用户来说,你的项目就是一组简单的视图集合,用户直接通过跟视图进行交互来操作你的应用,对于一个开发人员来说,视图是一个项目的入口,虽然大部分时候最有价值的部分是在model层和control ...

  5. sencha touch 入门系列 (六)sencha touch运行及代码解析(下)

    接着上一讲,通过index.html里development.js对app.json里js资源文件的解析,app.js便被index.html引入了, app.js是整个项目的程序入口,在项目完成时使 ...

  6. sencha touch 入门系列 (三)sencha touch 项目创建

    通过上一章节的学习,我们的开发环境已经配置好了,接下来我们开始创建第一个sencha touch的项目,网络上很多sencha touch的教程都是手动搭建项目的, 不过手动搭建的项目缺少一些senc ...

  7. sencha touch 入门系列 (一)sencha touch 简介

    参考链接:http://mobile.51cto.com/others-278381.htm Sencha touch 是基于JavaScript编写的Ajax框架ExtJS,将现有的ExtJS整合J ...

  8. sencha touch 入门系列 (五)sencha touch运行及代码解析(上)

    由于最近项目比较忙,加之还要转战原生开发,所以很久没更新了,今天我们接着上一次的内容往下讲: 首先我们打开index.html,这是我们整个程序的访问入口,也是整个项目的引入地: <!DOCTY ...

  9. sencha touch 入门系列 (四)sencha touch 新建项目目录结构解析

    通过上一章节的操作,我们的项目已经创建完成了, 大家通过http://127.0.0.1/MyFirst/应该都已经访问到了自己的应用, 接下来,我们展开我们项目,如图所示: 一.目录结构 1. .s ...

随机推荐

  1. JVM中的垃圾回收

    GC 垃圾回收回收什么 Java的内存分配原理与C/C++不同.C/C++每次申请内存时都要malloc进行系统调用.而系统调用发生在内核空间,每次都要中断进行切换,这须要一定的开销. 而Java虚拟 ...

  2. PHP注释的艺术——phpDoc规范

    用过IDE或看过其他源码的小伙伴们应该都见过类似下面这样的注释   /** * 递归获取所有游戏分类 * @param int $id * @return array */ 看得多了就大概知道了一些规 ...

  3. sparkr——报错

    > sc <- sparkR.init() Re-using existing Spark Context. Please stop SparkR with sparkR.stop() o ...

  4. DirectoryEntry 账户启动与停用 以及创建账户等

    启动账户: DirectoryEntry usr = new DirectoryEntry("LDAP://CN=New User,CN=users,DC=fabrikam,DC=com&q ...

  5. C++ 模板类友元之输出流操作符重载

    几个关键点: 需要前置声明!--奇怪的是别人告诉我也可以不需要,但我这里不行! 友元函数的函数名后面的<>,必须要有. #include <stdio.h> #include ...

  6. 【转】记一次ASP.NET MVC性能优化(实际项目中)

    前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...

  7. linux -- Ubuntuserver图形界面下安装、配置lampp、phpmyadmin

    PHP开发和服务器运行环境首选LAMP组合,即Linux+Apache+Mysql+Php/Perl/Python,能最优化服务器性能.如何在本地电脑Ubuntu 中安装和配置LAMP环境搭建?Ubu ...

  8. Java处理图片时编译不通过

    Java中处理图片时,MyEclipse需要导入以下包: import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.j ...

  9. erlang和java的socket通讯----最简单,初次实现。

    直接上源码,留做纪念. 有点简单,大家不要笑,初次实现. 功能描述:java发送数据给erlang,erlang将收到的数据重复两次再发送给java. erlang源码:模块tcp_listen -m ...

  10. BinarySearchTree二叉搜索树的实现

    /* 二叉搜索树(Binary Search Tree),(又:二叉查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; ...