线性布局是安卓程序中最常见的一种布局方式,线性布局可以分为水平线性布局和垂直线性布局两种,通过android:orientation属性可以设置线性布局的方向。

线性布局在生活中还是很常见的,比如手机上的计算器,横竖分明,非常好辨别和使用。

线性布局常用的属性:

android:gravity:控件自身上面的内容位置

android:layout_gravity:控件本身相对于父控件的显示位置

注意:在父容器设置为竖直方向时,layout_gravity只能控制水平位置;而当父容器设置为垂直方向时,layout_gravity只能控制竖直位置。

android:layout_weight:给控件分配剩余空间,分配权重

注意:layout_weight在设置前必须设置元素的高/宽为0dp,这样分配的空间才标准。因为权重最基本的用法就是  对线性布局指定方向(水平或垂直)上剩余空间分配的一个规则,先把规定的大小占完,再来按比例分配剩余空间

android:orientation:设置线性布局的排版方向,有vertical (垂直方向) 、horizontal(水平方向)两种布局方式

线性布局垂直方向示例:


android linearlayout 里子控件为什么被平分了 安卓linearlayout居中_3d

布局代码:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <Button
            android:layout_width="match_parent"
            android:layout_weight="2"
            android:gravity="left|center"
            android:text="按钮3"
            android:layout_height="0dp" />
        <Button
            android:layout_width="match_parent"
            android:layout_weight="8"
            android:text="按钮4"
            android:layout_height="0dp" />
        <Button
            android:layout_width="match_parent"
            android:layout_weight="2"
            android:text="按钮5"
            android:gravity="right"
            android:layout_height="0dp" />

    </LinearLayout>

首先设置布局为android:orientation="vertical",然后放上3个满宽度的Button,全部设置高度为0,然后分配android:layout_weight,然后一个标准的线性垂直排版就出现了。并且给最上边和最下边的按钮设置了android:gravity属性。让其文字显示位置改变。

线性布局水平方向示例:


android linearlayout 里子控件为什么被平分了 安卓linearlayout居中_3d_02

布局代码:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="0dp"
            android:layout_weight="4"
            android:text="按钮1"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="0dp"
            android:layout_weight="6"
            android:text="按钮2"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="0dp"
            android:layout_weight="7"
            android:text="按钮3"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="0dp"
            android:layout_weight="3"
            android:text="按钮4"
            android:layout_height="wrap_content" />
    </LinearLayout>

注:(大布局上使用了垂直布局,为的方便观察水平布局)

首先设置两个Linearlayout为

android:orientation="horizontal",然后放入2个Button,设置其宽度为0dp,方便分配权重观察。

RelativeLayout相对布局

相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,属性之间冲突的的可能性也大,所以使用相对布局时要多做些测试

相对布局常见属性:

android linearlayout 里子控件为什么被平分了 安卓linearlayout居中_布局_03


相对于线性布局,相对布局并没有太多需要叙述的。当相对布局的属性你都能够熟练运用,这个布局就差不多弄明白了,这里在下就简单的举一个例子


android linearlayout 里子控件为什么被平分了 安卓linearlayout居中_3d_04


这张图上的布局,是使用线性布局和相对布局混合搭配完成的,也是在下的课下练习

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp">

        <ImageView
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@mipmap/no_login_head"
            android:layout_centerHorizontal="true"
            android:id="@+id/touxiang"
            android:layout_marginTop="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登陆"
            android:textSize="20dp"
            android:textColor="#FFF"
            android:layout_below="@+id/touxiang"
            android:layout_centerHorizontal="true"
            />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img1"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img1"
            />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img2"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img2"
            />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img3"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img3"
            />

    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img4"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img4"
            />

    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img5"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img5"
            />

    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#8B1C62"
        android:layout_marginBottom="3dp"
        android:layout_weight="1">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/icn_01"
            android:layout_centerVertical="true"
            android:id="@+id/img6"
            android:layout_marginLeft="15dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我的收藏"
            android:gravity="left|center"
            android:textColor="#FFF"
            android:textSize="20dp"
            android:paddingLeft="10dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/img6"
            />

    </RelativeLayout>
</LinearLayout>

思路很简单,首先最大的布局使用线性布局(看也看得出来)。每一行的内容都是一个相对布局模块。第一个模块的内容是由一个图片和一个TextView组成,首先设置图片和TextView在父控件水平居中(android:layout_centerHorizontal="true"),再设置TextView在兄弟控件图片的下边(android:layout_below="@+id/touxiang")。就完成了,其余的内容,每一个RelativeLayout都在上一个RelativeLayout的下边,里面的图片和TextView都是设置了父控件垂直居中(android:layout_centerVertical="true"),在设置TextView在兄弟控件图片的右边(android:layout_toRightOf="@+id/img"),就完成了整个布局

以上便是线性布局和相对布局的一些简单的介绍和示例。