图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,将默认创建的
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,将默认创建的
android:layout_width="match_parent"