一、Fit布局
Fit布局很有特点,它只允许自己的第一个item被显示出来,并且填充满自己。如果它的item多于一个,那难免是会出些意外的情况的。
如果你发现你的容器内的控件有的没有全部被显示出来,那不妨看看它的layout是否为fit,试着将它强制设为vbox往往就能解决问题。
下图是在一个layout为fit的Panel里放了三个button的结果:
所以说:除非你想营造些令人匪夷所思的效果,请不要在fit布局的容器里面放超过一个的东西。
二、Card布局Sencha Touch 中,Card布局继承Fit布局。算是用得比较多的一个布局了,许多的界面切换都需要这个布局的Panel的参与。Sencha Touch中使用Card布局的有:TabPanel、Carousel。
该布局会包含多个子面板,任何时候都只有一个子面板处于显示状态,该布局的重点方法是setActiveItem,
让我们看看官方文档是怎么写的
Component对象:Sencha Touch里所有可视控件都是由Component派生的。
第一个参数可以是:
1. 一个数字 比如说1代表激活容器里items[1],即第二个item。
2. 一个字符串 这个字符串是一个Component对象的id。
3. 一个Component对象 如果你传入的Component对象不在容器的items中,则框架会自动将其添加至items,并设置为活动的item。
第二个参数可以是:
1. 一个字符串 这个字符串代表动画效果 可选的有 slide pop fade flip cube等
2. 一个动画对象 可以对动画效果进行更多的配置。如{type: 'slide', direction : 'right'} 如果想要做出更漂亮的动画效果,请参看官方文档 anim 类。
下面看一个例子:
var myApp = new Ext.Application({ name: 'myApp', launch: function () { var myPanel1 = new Ext.Panel({ id: 'myPanel1', layout: 'vbox', html: 'Oh, this is Panel1!', items: { xtype: 'button', text: '前往Panel2', handler: function(){ myApp.views.mainPanel.setActiveItem( //设置活动项的方法 'myPanel2', //第一个参数为mypanel2的id 在这里也可以填数字 ‘1’ 'slide' //这个参数为切换效果 ); } } }); var myPanel2 = new Ext.Panel({ id: 'myPanel2', layout: 'vbox', html: 'This is Panel2!', items: { xtype: 'button', text: '前往Panel3', handler: function(){ var pnl = new Ext.Panel({ html:'这个是点击按钮之后才创建的Panel,演示到此结束' }); myApp.views.mainPanel.setActiveItem( pnl,{ //这里参数是刚创建的panel type: 'slide', //这里动画效果为一个动画效果对象 direction: 'right' }); } } }); myApp.views.mainPanel = new Ext.Panel({ fullscreen: true, layout: 'card', items: [myPanel1, myPanel2] //第一个为默认界面 }); } });
这个例子演示了如何使用card布局进行画面的切换,当然,实际使用的时候,碰到更多的问题是无法避免的,本篇文章也无法为大家一一解答。如果大家有什么共性的问题,欢迎提出来探讨。
ps:因为TabPanel、Carousel本身都是Card布局,因此,我们也可以调用它的setActiveItem()来改变当前显示的内容
数据类型
1. 数据类型:基本数据类型(布尔和数值类型)和引用数据类型(类,接口和数组)。
2. 直接量:基本数据类型直接量、字符串直接量和null。
3. 变量:变量名、数据类型、存储单元和变量值。
4. 在引用数据类型变量的存储单元内存放的变量值是引用,即指向实例的索引。
5. 基本数据类型值传递相当于传的是值,不会改变函数外面变量的值
6. 引用数据类型值传递相当于传的是地址,会直接改变函数外面变量的内容
数组
1. 定义:
int [ ] arrayOfInt = new int[100];
int [ ] arrayOfInt = {2, 3, 4};
new int [ ] = {2, 3, 4}; // 匿名数组,用于传递给方法。
2. 复制:
int [ ] arrayOfInt1 = arrayOfInt2; // arrayOfInt1 和arrayOfInt2 两个变量引用相同的数组。
System.arrayCopy(from, fromIndex, to, toIndex, count); // 将一个数组里的值拷贝到另一个数组中。
3. 数组作为参数的使用:可以改变数组中元素的值
4. 注意:越界访问数组,编译时不会出错,但运行时会抛出异常
5. 声明一个数组变量并不创建一个数组对象或者为数组成分分配任何空间,它只创建变量自身,这个变量可以包含一个数组的引用。
垃圾回收机制1. Java没有机构方法,提供了一个类似的方法:protected void finalize()。
2. Java程序可以不用处理内存的释放,而由Java系统自动进行处理。
3. 原理:不再被Java程序所用的内存是可以释放的,这些内存也称为垃圾。所以释放内存也称为垃圾回收。判断一个存储单元是否是垃圾的依据是该存储单元嗦对应的对象是否仍为程序所用。而判断一个对象是否为程序所用的依据是是否有引用指向该对象。这样,Java虚拟机就可以自动判断出并收集到“垃圾”,但一般不会立即释放它们的存储空间。Java系统自己定义了一套垃圾回收算法,用来提高垃圾回收的效率。所以Java系统不保证先申请的存储单元会先被释放。
4. Java虚拟机另外提供了方法“System.gc()”来强制立即回收垃圾。
继承性
1. 子类的实例同时也是父类的实例,而父类的实例不是子类的实例
2. 子类实例的引用可以直接赋值给父类类型的引用变量,如:
J_SubClass a = new J_SubClass();
J_SuperClass b = a;
3. 如果父类类型的引用指向的实例是子类的实例,则该引用可以强制转换成子类的引用,如:
J_SubClass a = new J_SubClass();
J_SuperClass b= a;
J_SubClass t = (J_SubClass) b;
多态性1. 静态多态性(overload):在编译时就可以被系统识别,指的是同一个类中同名方法在功能上的重载。相同方法名和不同参数列表(参数个数,参数数据类型个数,参数的数据类型的顺序),建议具有相似功能。(返回值可以不同吗?回答:仅仅返回值不同的话编译会报错。)
2. 动态多态性(override):在编译时不能被系统识别,只有在运行时才能被系统识别。指的是子类方法对父类相同声明的方法的覆盖;覆盖方法的返回值必须和被覆盖方法的返回值类型一致;覆盖方法所抛出的异常必须和被覆盖方法所抛出的异常一致,或者是其子类;被覆盖的方法不能是private,否则在其子类中只是新定义了一个方法,并没有对其覆盖;覆盖的方法的访问权限必须比被覆盖方法更大。
封装性
1. 类的访问控制方式:公共模式(所有类访问)和默认模式(在同一个包内访问)。
2. 类的成员(域和方法)访问控制方式:公共模式(所有类),保护模式(同一个类,包,子类),默认模式(同一个类,同一个包),私有模式(同一个类)
抽象类和接口
1. 抽象方法不能含有方法体,而且必须在抽象类中
2. 抽象类不能实例化,但是可以含有非抽象的方法
3. 抽象方法不能同时被声明为private,static,final,native或者synchronized
4. Java不允许一个子类有多个直接父类,但允许一个类直接继承多个接口
5. 接口可以继承多个其他接口
6. 接口的修饰词包括:public,abstract,static,strictfp
7. 接口中的所有成员域都具有public,static,final的属性
8. 接口中的所用成员方法都具有public,abstract的属性
9. 抽象类(接口)的子类一定要覆盖抽象类(接口)中的所用抽象方法吗?回答:抽象方法必须在抽象类或接口中,如果抽象类的子类没有覆盖所有的抽象方法,那么它也是抽象类。
Static,final,volatile
1. Static可以用来修饰类的成员域和成员方法
2. 静态成员属于类,可以直接用点运算符连接类名和成员名来调用
3. 静态方法只能调用静态方法和静态成员
4. Final可以用来修饰类,类的成员域和成员方法
5. Final修饰类时,该类不能派生出子类
6. 成员域具有final属性时,该成员域只能在定义时赋值,而且以后就不能膝盖该成员域的值了,如果定义时没有赋值,就必须在构造方法中赋值
7. 当类的成员方法具有final的属性时,其子类不能覆盖该成员方法
8. 域可以声明为volatile,在这种情况下线程每次访问该变量时都必须使它对该域的工作拷贝与住拷贝一致,而且代表一个线程的一个或多个异变变量的住拷贝上的操作由主存储器确切的按照线程要求的顺序进行。一个final域不能再声明为volatile。
内部类
1. 创建内部类的实例:
外部类名.内部类名变量名 = 外部类的引用.new 内部类名(构造方法参数列表)
2. 内部类的成员域要具有静态属性,则它必须同时有final属性,而且其初始值必须是在编译时就能确定的常量
3. 匿名内部类:
Main 方法
public static void main(String args[])
1. main方法没有声明为public,编译可以通过,但运行时会提示“Main method not public.”
2. main方法没有加static修饰词,编译可以通过,但运行时会抛出error "NoSuchMethodError"
3. public static void 顺序可以变换
4. 没有写args 字符串数组,编译可以通过,但运行时会抛出error "NoSuchMethodError"
5. 没有从命令行输入任何参数,args数组为空,而不是null。即args.length == 0
构造方法
1. 构造方法没有返回值
2. 如果没有定义构造方法,系统会提供默认的构造方法,如果定义了,系统不会提供默认的构造方法。默认的构造方法没有参数,不提供操作。
3. 构造方法可以调用父类的构造方法(super()),也可以调用此类的另一构造方法(this()),这种调用必须由第一句来完成。
4. 子类的任何一个构造方法(有参,无参,系统提供)都会先调用父类的默认构造方法(无参或系统提供)。因此父类要么不定义构造方法,要么必须显式定义一个无参构造方法。
http://blog.csdn.net/zphappy/article/details/6658504