android--Layout(布局)

本文详细介绍了Android开发中的几种主要布局,包括LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)和GridLayout(网格布局)。讲解了各个布局的特点、常用属性及其子类控件的定位方式,帮助开发者更好地理解和运用这些布局。

LinearLayout

(线性布局)
定义:
LinearLayout是线性布局控件,它包含的子控件将以横向或者竖向的方式排列
LinearnLayout本身常用到的两个属性:
1:
android:orientation=”vertical”/”horizontal”(这个属性决定他子类控件的排布方式 垂直/水平)
2:
android:gravity=”center”
(这个属性决定他子类的xy的位置)
经常用到的几个属性值:
center_vertical:垂直(Y轴)居中
center_horizontal:水平(x轴)居中
center(水平垂直都居中)
right(子类控件位于当前布局的右边)
left(子类控件位于当前布局的左边)
bottom(子类控件位于当前布局的下面)

gravity属性是可以多级连用的:
android:gravity=”bottom/center_horizontal”
gravity属性设置在linearLayout中表示当前布局或者内容的位置

子类控件在LinearLayout中常用到的属性:
android:layout_gravity=”bottom”
指的是这个子类控件本身在父容器的XY位置
android:layout_weight=”1”
指的是这个子类控件本身占当前父容器的一个比例(比重)。

RelativeLayout

(相对布局)
定义:
RelativeLayout是相对布局控件,它包含的子控件将以控件之间的相对位置或者子类控件相对父类容器的位置的方式排列

子类控件在RelativeLayout中常用到的属性(相对父容器的位置)
android:layout_alignParentLeft=”true”
(子类控件相对当前父类容器靠左边)
android:layout_alignParentTop=”true”
(子类控件相对父类控件靠上面)
android:layout_marginLeft=”43dp”
(子类控件距离父类容器左边的距离)
android:layout_marginTop=”33dp”
(子类控件距离父类容器上边的距离)
android:layout_centerInParent=”true”
(子类控件相对于父类容器水平居中又垂直居中)
android:layout_centerHorizontal=”true”
(子类控件相对于父类容器水平居中)
android:layout_centerVertical=”true”
(子类控件相对于父类容器垂直居中)

FrameLayout

(帧布局)
这个布局中,所有的子元素都不能被放置在指定的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分或者全部遮挡。
代码示例:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_gravity="center"
        android:background="#e52b50"
        android:text="Page1"
        android:layout_width="500dp"
        android:layout_height="500dp"
        android:id="@+id/textView" />

    <TextView
        android:layout_gravity="center"
        android:background="#ffbf00"
        android:text="page2"
        android:layout_width="350dp"
        android:layout_height="350dp"
        android:id="@+id/textView2" />

    <TextView
        android:layout_gravity="center"
        android:background="#4b5320"
        android:text="page3"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:id="@+id/textView3" />

    <TextView
        android:layout_gravity="center"
        android:background="#b2beb5"
        android:text="page4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/textView4" />
</FrameLayout>

通过帧布局可以让progressBar显示文字等等。

AbsoluteLayout

(绝对布局)
这个布局又叫做坐标布局,可以直接指定子元素的绝对位置(xy)
但是由于手机的屏幕尺寸差别比较大,使用绝对定位适应性比较差,在屏幕适配上有缺陷。
开发中很少用到。
AbsoluteLayout子类控件的常用属性:
android:layout_x=”35dip”
android:layout_y=”40dip”

TableLayout

(表格布局)

TableLayout表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也是一个View的对象。
TableLayout的属性(全局属性)
android:collapseColumns:设置需要被隐藏的列的序号
android:shrinkColumns:设置允许被收缩的列的列序号
android:stretchColumns:设置运行被拉伸的列的列序号
这三个属性的列号都是从0开始算的,比如shrinkColunmns = “2”,对应的是第三列!
可以设置多个,用逗号隔开比如”0,2”,如果是所有列都生效,则用”*”号即可
除了这三个常用属性,还有两个属性,分别就是跳格子以及合并单元格,这和HTML中的Table类似:
android:layout_column=”2”:表示的就是跳过第二个,直接显示到第三个格子处,从1开始算的!
android:layout_span=”4”:表示合并4个单元格,也就说这个组件占4个单元格

GridLayout

(网格布局)
这个布局是Android 4.0以后引入的一个新的布局,和前面所学的TableLayout(表格布局) 有点类似,不过他有很多前者没有的东西,也更加好用。
相关属性总结:

设置排列方式:android:orientaion=”vertical(垂直)/horizontal(水平)”
设置对齐式:android:layout_gravity=”center/right/left/buttom”
同时两种的话 buttom|left
设置几行几列:
设置行数:androidrowCount=”4”设置网格布局有4行
设置列数:androidcolumnCount=”4”设置网格布局有4列

设置组件所在行列(从0开始)
第几行:androidLayout_row=”1”设置组件位于第二行
第几列:androidLayout_column=”2”设置组件位于第三列
设置组件横跨几行几列
横跨几行:androidLayout_rowSpan=”2”//纵向横跨两行
横跨几列:androidLayout_columnSpan=”3”//纵向跨行两列
示例代码:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="4"
    android:orientation="horizontal"
    android:rowCount="6" >

    <TextView
        android:layout_columnSpan="4"
        android:layout_gravity="fill"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="#FFCCCC"
        android:text="0"
        android:textSize="50sp" />

    <Button
        android:layout_columnSpan="2"
        android:layout_gravity="fill"
        android:text="回退" />

    <Button
        android:layout_columnSpan="2"
        android:layout_gravity="fill"
        android:text="清空" />

    <Button android:text="+" />

    <Button android:text="1" />

    <Button android:text="2" />

    <Button android:text="3" />

    <Button android:text="-" />

    <Button android:text="4" />

    <Button android:text="5" />

    <Button android:text="6" />

    <Button android:text="*" />

    <Button android:text="7" />

    <Button android:text="8" />

    <Button android:text="9" />

    <Button android:text="/" />

    <Button
        android:layout_width="wrap_content"
        android:text="." />

    <Button android:text="0" />

    <Button android:text="=" />

</GridLayout>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值