×

Android布局-RelativeLayout属性详解

96
自导自演的机器人
2016.05.27 14:58* 字数 908

RelativeLayout:A Layout where the positions of the children can be described in relation to each other or to the parent.

相对布局:子控件的位置可以相对于其他子控件或者父控件描述的布局

当我们创建一个新的工程时,系统默认给我们创建的一个布局就是RelativeLayout(相对布局),这足以说明相对布局的重要性。相对布局和LinearLayout,FrameLayout相比较来说,性能不是最好的,但是他可以大大减少布局的结构层次,从而达到优化布局的效果。


上图的布局是个典型的相对布局,如果你用线性布局的话,一个布局估计是做不到的,这时候你需要线性布局嵌套线性布局,这样就增加了布局的层次,从而消耗了性能。

既然是相对布局,那么它又相对于什么布局呢?当然只能是它的父控件或其他子控件布局。


1.相对于父布局

android:layout_centerVertical="true"//设置是否相对于父布局垂直居中

android:layout_centerHorizontal="true"//设置是否相对于父布局水平居中

android:layout_centerInParent="true"//设置是否相对于父布局居中(水平和垂直都有)

android:layout_alignParentTop="true"//设置是否紧贴父布局的顶部,即设置在父布局的顶部

android:layout_alignParentBottom="true"//设置是否紧贴父布局的底部,即设置在父布局的底部

android:layout_alignParentRight="true"//设置是否紧贴父布局的右侧,即设置在父布局的右侧

android:layout_alignParentLeft="true"//设置是否紧贴父布局的左侧,即设置在父布局的左侧

适配Api17的RTL布局:这里有RTL布局的详细说明

android:layout_alignParentStart="true"//设置是否紧贴父布局开始的位置

android:layout_alignParentEnd="true"//设置是否紧贴父布局结束的位置


2.相对于其他的子控件

android:layout_above="@+id/xxx"//位于某个id的控件的上方

android:layout_below="@+id/xxx"//位于某个id的控件的下方

android:layout_toLeftOf="@+id/xxx"//位于某个id的控件的左侧

android:layout_toRightOf="@+id/xxx"//位于某个id的控件的右侧

android:layout_alignTop="@+id/xxx"//设置和某个id的控件的上方位于一条线上

android:layout_alignBottom="@+id/xxx"//设置和某个id的控件的下方位于一条线上

android:layout_alignLeft="@+id/xxx"//设置和某个id的控件的左侧位于一条线上

android:layout_alignRight="@+id/xxx"//设置和某个id的控件的右侧位于一条线上

适配Api17的RTL布局:

android:layout_toStartOf="@+id/xxx"//设置位于某个id控件的开始位置

android:layout_toEndOf="@+id/xxx"//设置位于某个id控件的结束位置

android:layout_alignStart="@+id/xxx"//设置和某个id的控件的开始位置位于一条线上

android:layout_alignEnd="@+id/xxx" //设置和某个id的控件的结束位置位于一条线上


3.其他属性

android:layout_alignWithParentIfMissing="true"// 如果找不到其他子控件,就相对于父控件布局

是不是觉得每个子控件都要设置属性很麻烦?

在RelativeLayout中也有:

android:gravity="center_horizontal|bottom"//设置内部子控件的显示位置,居中,上下左右都可以

当然它还提供了一个方法,如果你不想某个子控件不受RelativeLayout的控制:

android:ignoreGravity="@id/xxx"//传入子控件的id

Android基础控件
Web note ad 1