Android UI之RelativeLayout(相对布局)

说明:RelativeLayout是目前android开发中最最常用的布局管理器(比LinearLayout还常用),布局内的子组件的位置总是相互依照其他子组件和RelativeLayout布局本身来确定的。这样最大的好处就是更加自由灵活,可以设计出更加炫酷复杂的界面,而且可以在IDE中通过直接拖拽来进行界面的布局设计。
注意:RelativeLayout的子组件不可以设置android:layout_gravity属性。

RelativeLayout中需要关注的属性就比较多了,大概可以分为三类:

1 android:ignoreGravity

对应方法:setIgnoreGravity(int)
说明:设置不受gravity属性影响的子组件。跟其他布局一样,Realtivelayout也可以使用android:gravity属性来设置其子组件的摆放位置,但RelativeLayout需要实现更加复杂的布局,所以为所有组件设置统一的摆放方式难以满足实际开发中的一些特殊需求,于是就有了这个属相来进行特殊的忽略。
举个栗子:

<RelativeLayout
    android:gravity="bottom"
    android:ignoreGravity="@id/view1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@drawable/muogu" />
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@drawable/nailiu16" />
</RelativeLayout>

这里写图片描述

可以看到,由于RelativeLayout中设置了gravity为bottom,所以第二个ImageView被摆放到了布局的底部,而ignoreGravity中设置了的view1就依然是我行我素地从左上角开始摆放。

2 只能设置为true、false的xml属性

说明:这一类属性主要是为了弥补RelativeLayout子组件不能设置layout_gravity属性的遗憾,可以直接为子组件指定摆放位置。

以下是这类属性的属性表:

属性名功能说明
android:layout_centerHoriazontal控制该子组件是否相对于父容器水平居中
android:layout_centerVertical控制该子组件是否相对于父容器垂直居中
android:layout_centerInParent控制该子组件是否相对于父容器居中
android:layout_alignParentBottom控制该子组件是否与父容器底端对齐
android:layout_alignParentTop控制该子组件是否与父容器顶端对齐
android:layout_alignParentLeft控制该子组件是否与父容器左端对齐
android:layout_alignParentRight控制该子组件是否与父容器右端对齐
android:layout_alignParentEnd控制该子组件是否与父容器结束对齐(右上角)
android:layout_alignParentStart控制该子组件是否与父容器开始对齐(左上角)

需要注意的是,这些属相是可以同时使用的,不过如果同时使用相互冲突的属性(比如layout_alignParentLeft和layout_alignParentRight)会产生一些比较古怪的效果,所以不建议同时使用有冲突的属性。

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/muogu" />
</RelativeLayout>

古怪的样式
系统会努力去适应所有的属性,导致组件被拉伸成很古怪的样子。

3 只能设置为其他UI组件ID的xml属性

说明:这些属相就是RelativeLayout的核心属性,就是通过这些属性,来确定各个子组件在布局方面的相互关系的。
以下是这类属性的属性表:

属性名功能说明
android:layout_toRightOf控制该子组件位于ID指定组件的右侧
android:layout_toLeftOf控制该子组件位于ID指定组件的左侧
android:layout_above控制该子组件位于ID指定组件的上方
android:layout_below控制该子组件位于ID指定组件的下方
android:layout_alignTop控制该组件顶端与ID指定组件的上边界对齐
android:layout_alignBottom控制该底端组件与ID指定组件的下边界对齐
android:layout_alignLeft控制该组件左端与ID指定组件的左边界对齐
android:layout_alignRight控制该组件右端与ID指定组件的右边界对齐
android:layout_alignStart控制该组件起始位置与ID指定组件的起始位置对齐(左上角)
android:layout_alignEnd控制该组件结束位置与ID指定组件的结束位置对齐(右上角)

另外可以使用margin或padding对组件进行细微的调整,如下所示:

 <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentEnd="true"
        android:src="@drawable/nailiu16"
        android:scaleType="fitXY" />
    <ImageView
        android:id="@+id/view2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/muogu"
        android:scaleType="fitXY"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/view1" />
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/muogu"
        android:scaleType="fitXY"
        android:layout_margin="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@+id/view2" />
</RelativeLayout>

相对布局示例

附:引用声明

《疯狂Android讲义(第二版)》 李刚 《2.2.4 相对布局》 电子工业出版社

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页