我们先看一张浏览器的主界面,上面标示浏览器界面各部分对应的类,这里是以平板上的界面为例。给张图是为了给大家一个直观的感觉。
BrowserActivity是整个应用的主界面,在onCreate中创建了Controller对象,Controller对象是整个应用最重要的管理类,这个后面再说。
@Override
public void onCreate(Bundle icicle) {
mController = createController();
}
Controller的创建中新建了UI类,UI类是最主要的视图类,它虽然不是View类的子类,只是一个包含很多抽象方法的接口,但是它的实现类包含了重要的View视图成员。后面将通过UI的实现类BaseUi将这些视图成员和BrowserActivity中布局文件中视图ID一一对应起来,关于这点后面描述。
private Controller createController() {
Controller controller = new Controller(this);
boolean xlarge = isTablet(this);
UI ui = null;
if (xlarge) {
ui = new XLargeUi(this, controller);
} else {
ui = new PhoneUi(this, controller);
}
controller.setUi(ui);
return controller;
}
由上,我们看到根据isTablet() 方法获取的值,将会创建不同的UI类。
看一下isTablet()方法:
public static boolean isTablet(Context context) {
return context.getResources().getBoolean(R.bool.isTablet);
}
可以看出,这里是通过一个资源文件的值来确定的,实际上这里是用来区分这个是手机应用还是平板应用的。取值为true的时候获取的是XLargeUi对象,取值为false的时候,获取的是PhoneUi对象。由于我的项目是平板的,就以XLargeUi 为例进行分析。
在此,我们把这几个类的继承关系理一理:
public interface UI {
//....
}
public abstract class BaseUi implements UI {
//...
}
public class XLargeUi extends BaseUi {
//...
}
public class PhoneUi extends BaseUi {
//...
}
我们现在来看看XLargeUi 的定义:
public clas