Android笔记2——Android的用户界面1

来源:互联网 发布:伦纳德数据 编辑:程序博客网 时间:2024/04/30 00:57

一、概述

Android应用的绝大部分组件都位于Android.widget包及其子包、Android.view包及其子包中。

Android的所有UI组件都是View类的子类,view类有点类似Swing中的JPanel,你可以在上面绘制图形以显示在屏幕上,也可以定义动作与用户交互。

除了基本的UI组件,还有一类组件是用来容纳其他组件的,比如布局管理器。这些组件都是ViewGroup的子类。ViewGroup类也是View类的子类。

所以Android的界面实际上就是由View类对象和ViewGroup类对象构成的。其基本结构如下图所示


<图片:ViewGroup>


二、布局管理器

为适应不同的屏幕尺寸,Android的UI界面很少直接使用,都是放置在不同的布局管理器里的。

这样,当屏幕尺寸变化时,组件之间的相对位置会发生相应的变化。具体如何变化,可以由布局管理器来控制。


2.1 使用xml布局文件定义UI界面

Android可以和Java一样,在程序代码中定义、添加组件,但这样做会使得代码臃肿,难以阅读。

大量视图控制逻辑的代码和程序流程的代码耦合在一起,使得修改UI界面和流程都变得痛苦。

Android推荐使用xml布局文件进行UI界面的设计。通过在xml文件中按层次定义各种标签,可以逐步把UI界面搭建起来。

在代码中只需要将xml布局文件载入进来,就可以生成UI界面。这样,就把流程代码和视图控制逻辑代码有效地解耦了,方便程序修改。

xml中的各种属性定义本质上还是通过控制View和ViewGroup的类属性来定义UI界面的,ViewGroup还有两个内部类

ViewGroup.LayoutParams和ViewGroup.MarginLayoutParams,用于辅助控制布局。这两个类也提供了很多xml属性。


所以Android中用户界面设计的一般流程是:

a. 在res/layout目录下定义布局xml文件

b.在Activity的OnCreate方法中使用以下代码将布局文件载入

setContentView(R.layout.<布局文件的名字>);

c.如果要获取UI界面中的某个组件,以控制其行为,则使用以下代码

findViewById(R.id.<组件id>)

因此,需要后期在代码中获取的组件,都必须在xml文件中指定一个id。另外findViewById得到的是View类对象,

对于具体的组件,需要进行一次类型的强制转换。


2.2 Android中的布局管理器

Android中的布局管理器有线性布局、相对布局、表格布局、网格布局、帧布局和绝对布局。它们都是ViewGroup的子类。

其中表格布局还是线性布局的子类


<图片:布局管理器类图>

线性布局就是将UI组件按添加顺序从左到右或者从上到下依次排列,通过一些xml属性,可以控制对齐方式等。

表格布局是线性布局的子类,采用行、列的形式来管理UI组件。表格布局不需要明确地声明行、列数目,

而是可以通过添加组件的过程自动计算出行数和列数。

相对布局是通过定义组件相对于另一个组件或父组件的位置关系,来定义UI界面。

帧布局是根据添加的顺序,将组件一个一个地叠加在一起。

网格布局是Android4.0新增的一个布局。它把整个容器划分成rows*columns个网格,每个网格可以放置一个组件。

除此之外,也可以设置一个组件占据多个相邻网格。

绝对布局就是将组件的X,Y坐标设定死,一般很少使用。


三、TextView类及其子类

从外形上看,TextView组件就是在一个区域内绘制了文本的组件。很多组件其实都是类似的外观,比如按钮、文本编辑框、数字时钟等,

因此这些组件都可以由TextView派生出来


<图片: TextView类及其子类>

TextView类提供了很多属性,用于控制文本、背景的外观。


四、ImageView及其子类

从外观上看,ImageView就是在一个区域内绘制了图片的组件。

实际上ImageView里不仅可以绘制图片,任何Drawable对象都可以绘制在ImageView里。

Drawable是Android提供的一个抽象基类,代表了“可以被绘制出来的某种东西”,Drawable包含了大量子类,比如BitmapDrawable、

ColorDrawable和ShapeDrawable等。

ImageView的子类有ImageButton、ZoomButton和QuickContactBadge。


<图片: ImageView及其子类>

0 0