Android绝大部分UI组件都放在android.widget,android.view包及其子包,android应用中所以UI组件都继承了View类,View代表一个空白的矩形区域;
android所有UI组件都建立在View和ViewGroup基础之上的;View类是所有UI组件的基类,ViewGroup是一个抽象类,通常使用其子类来作为容器;
View 类
View类为所有可视化控件的基类,主要提供了控件和事件处理的方法,比如TextView,Button,CheckBox等;
View类常见属性及对应方法说明:
Android:background
SetBackgroundResource(int)
设置背景
Android:clickable
SetClickable(boolean)
设置View是否响应单击事件
Android:visibility
SetVisibiltiy(int)
控制View的可见性
Android:focusable
SetFocusable(boolean)
控制View是否可以获取焦点
Android:id
SetId(int)
为View设置标识符,可以通过findViewById方法获取Id
Android:longClickable
SetLongClickable(boolean)
设置View是否响应长单击事件
Android:soundEffectEabled
setSoundEffectsEnable(boolean)
设置View触发单击等事件是否播放音效
Android:saveEnable
SetSaveEnabled(boolean)
View冻结时是否保存状态
Android:nextFocusDown
SetNextFocusDownId(int)
定义向下获取焦点的View
Android:nextFocusLeft
Android:nextFocusRight
Android:nextFocusUp
定义不同操作方向获取焦点的View
任何继承View的子类都拥有如上的属性及方法;
ViewGroup类是View类的子类,但是可以充当其他控件的容器,ViewGroup的子控件既可以是普通的View,也可以是ViewGroup;
关于View和ViewGroup的关系
View是基类,ViewGroup是View的子类;
View代表用户界面组件一块可以绘制的空间块;
每一个View在屏幕上占据一个长方形区域,在这个区域,view负责图像绘制和事件处理;
View类是小控件widgets和ViewGroup的父类;ViewGroup又是Layout的基类;
线性布局
提供控件水平或竖直排列的模型;
Android:orientation
SetOrientation(int)设置线性布局的朝向;
Android:gravity
SetGrabity(int)设置线性布局内部元素的布局方式;
表格布局
TableLayout类以行和类的形式管理控件,每行为一个TableRow对象,也可以为View对象,当为View对象时,该View对象将跨越该行的所有类;
在表格布局中,一个列的宽度由该列中最宽的那个单元指定,而表格的宽度由父容器指定;
在TableLayout中,可以为列设置如下3种属性;
Shrinkable 如果一个列被标志为Shrinkable,则该列的宽度可以进行收缩,以使表格能够适应其父容器的大小;
Stretchable 如果一个列被标志位Stretchable,则该列的宽度可以进行拉伸,以 填满表格中空闲的空间。
Collapsed,则该列会被隐藏;
TableLyout继承LinearLayout类,TableLyout类特有的属性和方法如下:
SetColumnCollapsed(int,boolean)
列号从0开始,设定指定列号的列为Collapsed
同样,可以设置Shrinkable,Stretchable;
RelativeLayout
在相对布局中,子控件的位置是相对兄弟控件或父容器而决定的;
属 性 名 称 | 属 性 说 明 |
android:layout_centerHorizontal | 当前控件位于父控件的横向中间位置 |
android:layout_centerVertical | 当前控件位于父控件的纵向中间位置 |
android:layout_centerInParent | 当前控件位于父控件的中央位置 |
android:layout_alignParentBottom | 当前控件底端与父控件底端对齐 |
android:layout_alignParentLeft | 当前控件左侧与父控件左侧对齐 |
android:layout_alignParentRight | 当前控件右侧与父控件右侧对齐 |
android:layout_alignParentTop | 当前控件顶端与父控件顶端对齐 |
android:layout_alignWithParentIfMissing | 参照控件不存在或不可见时参照父控件 |
接下来再来看属性值为其他控件id的属性,如表3-6所示。
表3-6 相对布局中取值为其他控件id的属性及说明
属 性 名 称 | 属 性 说 明 |
android:layout_toRightOf | 使当前控件位于给出id控件的右侧 |
android:layout_toLeftOf | 使当前控件位于给出id控件的左侧 |
android:layout_above | 使当前控件位于给出id控件的上方 |
android:layout_below | 使当前控件位于给出id控件的下方 |
android:layout_alignTop | 使当前控件的上边界与给出id控件的上边界对齐 |
android:layout_alignBottom | 使当前控件的下边界与给出id控件的下边界对齐 |
android:layout_alignLeft | 使当前控件的左边界与给出id控件的左边界对齐 |
android:layout_alignRight | 使当前控件的右边界与给出id控件的右边界对齐 |
最后要介绍的是属性值以像素为单位的属性及说明,如表3-7所示。
表3-7 相对布局中取值为像素的属性及说明
属 性 名 称 | 属 性 说 明 |
android:layout_marginLeft | 当前控件左侧的留白 |
android:layout_marginRight | 当前控件右侧的留白 |
android:layout_marginTop | 当前控件上方的留白 |
android:layout_marginBottom | 当前控件下方的留白 |
FrameLayout类
帧布局
FrameLayout帧布局在屏幕上开辟了一块区域,在这块区域中可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角,帧布局的大小由子控件中尺寸最大的那个子控件来决定,如果子控件一样大,同一时刻只能看到最上面的子控件;
FrameLayout继承自ViewGroup,FrameLayout所特有的属性和方法如下:
Android:foreground
SetForeground(Drawable)
设置绘制所有子控件之上的内容
Android:foregroundGravity
SetForegroundGraviety(int)
设置绘制所有子控件之上内容的gravity属性
在FrameLayout中,子控件是通过栈来绘制的,所以后添加的子控件会被绘制在上层;
AbsoluteLayout类
所谓绝对布局,是指屏幕中所有控件摆放的控件位置由坐标来指定;