Android常见界面布局
Android常见界面布局
2.1 View视图
Android所有的UI元素都是通过View与ViewGroup构建的,ViewGroup作为容器承装界面中的控件,他可以包含普通的View控件,也可以包含ViewGroup。如下图是界面中ViewGroup布局和控件的包含关系。
TIP:Android应用的每个界面的根元素必须有且只有一个ViewGroup容器。
2.2 界面布局编写方式
2.2.1 在XML中编写布局
Android可以使用XML布局文件控制界面布局,从而有效地将界面中布局的代码和Java代码隔离,使程序结构更加清晰。因此多数Android程序采用这种方式编写布局。
2.2.2 在Java代码中编写布局
Android程序的布局不仅可以在XML布局文件中编写,还可以在Java代码中编写。在Android中所有布局和控件的对象都可以通过new关键字创建出来,将创建的View控件添加到ViewGroup布局中,从而实现View控件在布局中显示。
TIP:不管使用哪种方编写布局,他们控制Android用户界面的本质是完全一致的,大多数时候,控制UI元素的XML属性都有对应的方法。
2.3 常见界面布局
Android系统提供了五种常见布局,分别是RelativeLayout(相对布局),LinearLayout(线性布局),FrameLayout(帧布局),TableLayout(表格布局),ConstraintLayout(约束布局)。
2.3.1 布局的通用属性
Android系统提供的五种常见布局直接或间接继承自ViewGroup,因此常见的布局也支持在ViewGroup中定义的属性,这些属性可以看作布局的通用属性。如下图:
2.3.2 RelativeLayout相对布局
RelativeLayout(相对布局)通过相对定位的方式指定子控件的位置,在XML布局文件中定义相对布局时使用标签,定义格式如下图:
RelativeLayout通过以父容器或其他子控件为参照物,指定布局中子控件的位置。在RelativeLayout的子控件具备一些属性,用于指定子控件的位置,控件属性如下图:
2.3.3 LinearLayout线性布局
LinearLayout(线性布局)通常指定布局内的子控件水平或者竖直排列。在XML布局文件中定义线性布局的基本语法格式如下:
除了布局的通用属性外,LinearLayout布局还有两个比较常见的属性,具体如下表:
1.属性说明
android:orientation属性,用于设置LinearLayout布局中控件的排列顺序,其可选值为vertical和horizontal。其中:
vertical:表示LinearLayout布局内控件依次从上到下竖直排列。
horizontal:表示LinearLayout布局内控件依次从左到下右水平排列。
2.android:layout_weight属性:该属性别称为权重,通过设置该属性值可使布局内的控件按照权重比显示大小,在进行屏幕适配时起到关键作用。
2.3.4 TableLayout表格布局
TableLayout(表格布局)采用行,列的形式来管理控件,它不需要明确声明包含多少行,多少列,而是通过在TableLayout布局中添加TableRow布局或控件来控制表格的行数,可以在TableRow布局中添加控件来控制表格的列数。在XML中定义表格布局的基本语法格式如下:
TableLayout继承自LinearLayout,因此它完全支持LinearLayout所支持的属性,此外,它还有其他常见属性。如下图:
TableLayout布局中的控件有两个常见属性android:layout_column与android:layout_span,分别用于设置控件显示的位置,占据的行数,如表所示:
TIP:在TableLayout布局中,列的宽度由该列中最宽的那个单元格(控件)决定,整个表格布局的宽度取决于父容器的宽度。
2.3.5 FrameLayout帧布局
FrameLayout(帧布局)用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中所有的控件会与左上角对齐。在XML布局文件中定义FrameLayout的基本语法格式如下:
帧布局除了2.3.3小节介绍的通用属性外,还有两个特殊属性,如下表:
2.3.6 ConstrainLayout约束布局
ConstrainLayout是Android Studio 2.2新增加的布局。与前面介绍的界面布局相比,ConstrainLayout并不太适合使用XML代码的方式编写布局,但是他非常适合使用可视化的方式编写界面布局。相对于传统布局,ConstrainLayout在以下几个方面提供了一些新的特性:
1.相对定位
相对定位是在ConstrainLayout中创建布局的基本构建方法之一。相对定位即一个控件相对于另一个控件进行定位,ConstrainLayout布局中的控件可以在横向和纵向上添加约束关系的方式进行相对定位。
2.居中定位和倾向
在ConstrainLayout布局中,不仅两个控件之间可以通过添加约束的方式确定控件的相对定位,控件也可以通过添加约束的方式确定连控件在父控件中的相对位置。当相同方向上,控件两边同时向ConstrainLayout添加约束,则控件在添加约束方向上居中显示。
在约束是同向相反的情况下,默认控件是居中的,但是也像拔河一样,两个约束的力大小不同时,就会产生倾向,设置倾向的属性如下表:
TIP:如果ConstrainLayout布局中的控件在居中方向上和父布局尺寸一致,此时该方向的居中约束和倾向没有意义。
3.Chain
Chain(链)是一种特殊的约束,它使我们能够对一组水平或者竖直方向互相关联的控件进行统一管理。一组控件通过一个双向的约束关系链接起来,就能形成一个Chain。