线性布局是安卓程序中最常见的一种布局方式,线性布局可以分为水平线性布局和垂直线性布局两种,通过android:orientation属性可以设置线性布局的方向。
线性布局在生活中还是很常见的,比如手机上的计算器,横竖分明,非常好辨别和使用。
线性布局常用的属性:
android:gravity:控件自身上面的内容位置
android:layout_gravity:控件本身相对于父控件的显示位置
注意:在父容器设置为竖直方向时,layout_gravity只能控制水平位置;而当父容器设置为垂直方向时,layout_gravity只能控制竖直位置。
android:layout_weight:给控件分配剩余空间,分配权重
注意:layout_weight在设置前必须设置元素的高/宽为0dp,这样分配的空间才标准。因为权重最基本的用法就是 对线性布局指定方向(水平或垂直)上剩余空间分配的一个规则,先把规定的大小占完,再来按比例分配剩余空间
android:orientation:设置线性布局的排版方向,有vertical (垂直方向) 、horizontal(水平方向)两种布局方式
线性布局垂直方向示例:
布局代码:
<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属性。让其文字显示位置改变。
线性布局水平方向示例:
布局代码:
<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 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,属性之间冲突的的可能性也大,所以使用相对布局时要多做些测试
相对布局常见属性:
相对于线性布局,相对布局并没有太多需要叙述的。当相对布局的属性你都能够熟练运用,这个布局就差不多弄明白了,这里在下就简单的举一个例子
这张图上的布局,是使用线性布局和相对布局混合搭配完成的,也是在下的课下练习
代码如下:
<?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"),就完成了整个布局
以上便是线性布局和相对布局的一些简单的介绍和示例。