Android之布局

作者: 勇敢的_心_ | 来源:发表于2018-01-31 10:39 被阅读48次

    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之布局

      本文链接:https://www.haomeiwen.com/subject/bqckzxtx.html