Android之布局

LinearLayout - 线性布局

线性布局,最常用的布局之一,所有包含在线性布局里的控件在线性方向上依次排列。

注意:
线性布局不会换行,当组件一个挨着一个地排列到头之后,剩下的组件将不会被显示出来。

1.方向

在线性布局里面的控件,是按照线性的顺序进行排列的,方向有两种:横向和纵向。

属性和属性值:

android:orientation = "horizontal" // 水平
android:orientation = "vertical" // 垂直

2.对齐方式

属性:

android:gravity //指本元素的子元素相对它的对齐方式
android:layout_gravity //指本元素相对它的父元素的对齐方式

注意:
相对其他属性,如果加上layout_前缀,就代表本元素相对父元素的属性。

常用属性值:

android:gravity = "center_horizontal" //子控件水平方向居中
android:gravity="center_vertical" //子控件竖直方向居中
android:gravity="center" //子控件竖直方向和水平方向居中
android:gravity= start || end || top || bottom //子控件左对齐 || 右对齐 || 顶部对齐 || 底部对齐
android:gravity= left || right  //子控件左对齐 || 右对齐

3.子控件大小

属性:

android:layout_height
android:layout_width
android:weight // 指定该子元素在LinearLayout中所占的权重

属性值:

android:layout_height = "wrap_content"//根据子控件内容的大小决定大小
android:layout_height = "match_parent" //子控件填满父容器
android:layout_height = "10dp" // 直接赋值

android:layout_weight = "1" //设置占比例为1,子控件占父控件的比例

RelativeLayout - 相对布局

相对布局,也是非常常用的布局之一,和LinearLayout严格的线性排列不同,相对布局更随意,它可以让子控件出现在整个布局的任何位置。

相对布局通常有两种形式,一种是相对于容器而言的,一种是相对于控件而言的。

1.常用属性值设置

排列在父控器的位置:

android:layout_centerHrizontal  //水平居中
android:layout_centerVertical //垂直居中
android:layout_centerInparent //相对于父元素完全居中
android:layout_alignParentBottom //贴紧父元素的下边缘
android:layout_alignParentLeft //贴紧父元素的左边缘
android:layout_alignParentRight //贴紧父元素的右边缘
android:layout_alignParentTop //贴紧父元素的上边缘 

2.子控器间的设置

根据另一个控件的位置来确定控件的位置:

android:layout_below //在某元素的下方
android:layout_above //在某元素的上方
android:layout_toLeftOf // 在某元素的左边
android:layout_toRightOf //在某元素的右边
android:layout_alignTop //本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft //本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom //本元素的下边缘和某元素的的下边缘对齐    
android:layout_alignRight //本元素的右边缘和某元素的的右边缘对齐

3.内边距和外边距设置

margin 边缘(外):指该控件距离父控件或其他控件的边距

android:layout_marginBottom //离某元素底边缘的距离
android:layout_marginLeft //离某元素左边缘的距离
android:layout_marginRight //离某元素右边缘的距离
android:layout_marginTop //离某元素上边缘的距离

padding 衬垫,填充(内):指该控件内部内容,如文本/图片距离该控件的边距。

android:padding //为组件的四边设置相同的内边距。
android:paddingLeft //为组件的左边设置内边距。
android:paddingRight //为组件的右边设置内边距。
android:paddingTop //为组件的上边设置内边距。
android:paddingBottom //为组件的下边设置内边距

FrameLayout - 帧布局

没有任何定位方式,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个。

由于帧布局的特性,它的应用场景并不是很多,不过它经常配合Fragment使用。

1.特有属性

android:foreground //设置改帧布局容器的前景图像
android:foregroundGravity //设置前景图像显示的位置

AbsoluteLayout - 绝对布局

绝对布局需要通过指定x、y坐标来控制每一个控件的位置,放入该布局的控件需要通过android:layout_x和android:layout_y 两个属性指定其准确的坐标值,并显示在屏幕上。

注意:
当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置和大小,都需要开发人员自己控制。

1.使用

使用绝对布局时,每个子组件都可指定如下两个XML属性。

layout_x //指定该子组件的X坐标。
layout_y //指定该子组件的Y坐标。

TableLayout - 表格布局

表格布局就是让控件以表格的形式来排列控件,只要将控件放在单元格中,控件就可以整齐地排列,使用TableLayout标签。

TableLayout继承了 LinearLayout,因此它的本质依然是线性布局管理器。

1.使用:

向TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此它也可以不断地添加其他组件,每添加一个子组件该表格就增加一列。如果直接向TableLayout中添加组件,那么这个组件将直接占用一行。

2.单元格设置:

  • Shrinkable: 如果某个列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度。
  • Stretchable: 如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间。
  • Collapsed: 如果某个列被设为Collapsed,那么该列的所有单元格会被隐藏。

ConstraintLayout - 约束布局

根据布局中的其他元素或视图, 确定View在屏幕中的位置, 受到三类约束, 即其他视图, 父容器(parent), 基准线(Guideline)

1.优点:

它可以有效地解决布局嵌套过多的问题;
控件拖动添加约束;

GridLayout - 网格布局

网格布局实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。
网格布局用一组无限细的直线将绘图区域分成行、列和单元,并指定控件的显示区域和控件在该区域的显示方式;

控制GridLayout布局容器中各子组件的布局分布,GridLayout提供了一个内部类:GridLayout.LayoutParams,该类提供了大量的XML属性来控制GridLayout布局容器中子组件的布局分布。

你可能感兴趣的:(Android之布局)