在相对布局(RelativeLayout)中,子控件的位置是相对兄弟控件或父容器而决定的。出于性能考虑,在设计相对布局时,要按照控件之间的依赖关系排列。如View A的位置相当于View B来决定 ……
在相对布局(RelativeLayout)中,子控件的位置是相对兄弟控件或父容器而决定的。出于性能考虑,在设计相对布局时,要按照控件之间的依赖关系排列。如View A的位置相当于View B来决定,则需要保证布局文件中View B在View A的前面。
在进行相对布局时,用到的布局属性有很多,首先来看属性值为true或false的属性,见下表:
相对布局中取值为true或false的属性列表
属性名称 | 属性说明 |
android:layout_centerHorizontal | 当前控件位于父控件的横向中间位置 |
android:layout_centerVertical | 当前控件位于父控件的纵向中间位置 |
android:layout_centerInParent | 当前控件位于父控件的中央位置 |
android:layout_alignParentBottom | 当前控件底端与父控件底端对齐 |
android:layout_alignParentLeft | 当前控件左侧与父控件左侧对齐 |
android:layout_alignParentRight | 当前控件右侧与父控件右侧对齐 |
android:layout_alignParentTop | 当前控件顶端与父控件顶端对齐 |
android:layout_alignWithParentIfMissing | 参照控件不存在或不可见时参照父控件 |
接下来再来看看属性值为其他控件id的属性,见下表:
相对布局中取值为其他控件id的属性及其说明
属性名称 | 属性说明 |
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_marginLeft | 当前控件左侧的留白 |
android:layout_marginRight | 当前控件右侧的留白 |
android:layout_marginTop | 当前控件上方的留白 |
android:layout_marginBottom | 当前控件下方的留白 |
android:layout_margin | 当前控件上下左右四个方向的留白 |
需要注意的是:在进行相对布局时要避免出现循环依赖,例如设置相对布局在父容器中的排列方式为WRAP_CONTENT,就不能再将相对布局的子控件设置为ALIGN_PARENT_BOTTOM。因为这样会造成子控件和父控件相互依赖和参照的错误。
下面就先来看看相对布局的效果图:
其中Main.xml代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <!-- 声明一个相对布局 -->
- <RelativeLayout
- android:id="@+id/RelativeLayout01"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#ffffff"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- 第一个ImageView控件,位于父控件的中央位置 -->
- <ImageView
- android:id="@+id/ImageView01"
- android:background="@drawable/center"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true">
- </ImageView>
- <!-- 第二个ImageView控件,位于第一个控件的右侧 -->
- <ImageView
- android:id="@+id/ImageView02"
- android:background="@drawable/down"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/ImageView01"
- android:layout_alignTop="@id/ImageView01">
- </ImageView>
- <!-- 第三个ImageView控件,位于第一个控件的上方 -->
- <ImageView
- android:id="@+id/ImageView03"
- android:background="@drawable/up"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_above="@id/ImageView01"
- android:layout_alignLeft="@id/ImageView01">
- </ImageView>
- </RelativeLayout>
Activity代码为:
- package com.sunchis;
- import android.app.Activity;
- import android.os.Bundle;
- public class Android extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main); //设置屏幕
- }
- }