万书网 > 文学作品 > Android从入门到精通 > 第13页

第13页





图3.2 通过代码布局游戏开始界面

单击文字“单击进入游戏……”,将弹出如图3.3所示的提示对话框。



图3.3 系统提示对话框

说明:  完全通过代码控制UI界面虽然比较灵活,但是其开发过程比较烦琐,而且不利于高层次的解耦,因此不推荐采用这种方式控制UI界面。

3.1.3 使用XML和Java代码混合控制UI界面

完全通过XML布局文件控制UI界面,实现比较方便快捷,但是有失灵活;而完全通过Java代码控制UI界面,虽然比较灵活,但是开发过程比较烦琐。鉴于这两种方法的优缺点,下面来看另一种控制UI界面的方法,即使用XML和Java代码混合控制UI界面。

使用XML和Java代码混合控制UI界面,习惯上把变化小、行为比较固定的组件放在XML布局文件中,把变化较多、行为控制比较复杂的组件交给Java代码来管理。下面通过一个具体的实例来演示如何使用XML和Java代码混合控制UI界面。

例3.3   在Eclipse中创建Android项目,名称为3.3,通过XML和Java代码在窗体中横向并列显示4张图片。(实例位置:光盘\TM\sl\3\3.3)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认创建的组件删除,然后将默认创建的线性布局的orientation属性值设置为horizontal(水平),并且为该线性布局设置背景以及id属性。修改后的代码如下:








android:orientation="horizontal"



android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:background="@drawable/background"



android:id="@+id/layout"



>





(2)在MainActivity中,声明img和imagePath两个成员变量,其中,img是一个ImageView类型的一维数组,用于保存ImageView组件;imagePath是一个int型的一维数组,用于保存要访问的图片资源。关键代码如下:

private  ImageView[]  img=new  ImageView[4];  //声明一个保存ImageView组件的数组



private  int[]  imagePath=new  int[]{



R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04



};  //声明并初始化一个保存访问图片的数组

(3)在MainActivity的onCreate()方法中,首先获取在XML布局文件中创建的线性布局管理器,然后通过一个for循环创建4个显示图片的ImageView组件,并将其添加到布局管理器中。关键代码如下:

setContentView(R.layout.main);



LinearLayout  layout=(LinearLayout)findViewById(R.id.layout);  //获取XML文件中定义的线性布局管理器



for(int  i=0;i


img[i]=new  ImageView(this);  //创建一个ImageView组件



img[i].setImageResource(imagePath[i]);  //为ImageView组件指定要显示的图片



img[i].setPadding(5,  5,  5,  5);  //设置ImageView组件的内边距



LayoutParams  params=new  LayoutParams(253,148);  //设置图片的宽度和高度



img[i].setLayoutParams(params);  //为ImageView组件设置布局参数



layout.addView(img[i]);  //将ImageView组件添加到布局管理器中



}

运行本实例,将显示如图3.4所示的运行结果。



图3.4 在窗体中横向并列显示4张图片

3.1.4 开发自定义的View

在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的。其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器,其本身也是View类的子类。在ViewGroup类中,除了可以包含普通的View类外,还可以再次包含ViewGroup类。View类和ViewGroup类的层次结构如图3.5所示。



图3.5 Android  UI组件的层次结构

一般情况下,开发Android应用程序的UI界面,都不直接使用View和ViewGroup类,而是使用这两个类的子类。例如,要显示一张图片,就可以使用View类的子类ImageView。虽然Android提供了很多继承了View类的UI组件,但是在实际开发时,还会出现不足以满足程序需要的情况。这时,用户就可以通过继承View类来开发自已的组件。开发自定义的View组件大致分为以下3个步骤。

(1)创建一个继承android.view.View类的View类,并且重写构造方法。

(2)根据需要重写相应的方法。可以通过下面的方法找到可以被重写的方法。

在代码中单击鼠标右键,在弹出的快捷菜单中选择“源代码”/“覆盖/实现方法”命令,将打开如图3.6所示的窗口,在该窗口的列表框中显示出了可以被重写的方法。只需要选中要重写方法前面的复选框,并单击“确定”按钮,Eclipse将自动重写指定的方法。通常情况下,不需要重写全部方法。



图3.6 “覆盖/实现方法”窗口

(3)在项目的活动中,创建并实例化自定义View类,并将其添加到布局管理器中。

下面通过一个具体的实例来演示如何开发自定义的View类。

例3.4   在Eclipse中创建Android项目,名称为3.4,自定义View组件实现跟随手指的小兔子。(实例位置:光盘\TM\sl\3\3.4)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认创建的组件删除,然后添加一个帧布局管理器FrameLayout,并且设置其背景和id属性。修改后的代码如下:








android:layout_width="match_parent"