Android 自学之相对布局 RelativeLayout

时间:2023-03-09 01:37:25
Android 自学之相对布局 RelativeLayout

相对布局(RelativeLayout),相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的。

RelativeLayout的XML属性及相关方法说明

XML属性 相关方法 说明
android:gravity setGravity(int) 设置该布局容器内部各子组件的对齐方式
android:ignoreGravity setIgnoreGravity(int) 设置那个组件不受Gravity的影响

RelativeLayout.LayoutParams里只能设为boolean值的属性:

  android:layout_centerHrizontal 水平居中
  android:layout_centerVertical 垂直居中
  android:layout_centerInparent 相对于父元素完全居中
  android:layout_alignParentBottom 贴紧父元素的下边缘
  android:layout_alignParentLeft 贴紧父元素的左边缘
  android:layout_alignParentRight 贴紧父元素的右边缘
  android:layout_alignParentTop 贴紧父元素的上边缘
  android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

RelativeLayout.LayoutParams里只能设为其他UI组件ID的属性:

android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

除了这些,RelativeLayout.LayoutParams还继承了android.view.ViewGroup.MarginLayoutParams,所以RelativeLayout布局容器中每个组件也可以指定android.view.ViewGroup.MarginLayoutParams所支持的XML属性。

下面有个用相对布局编写的范例:

layout/main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> <!-- 定义该组件位于父容器中间 -->
<TextView android:id="@+id/view01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leaf"
android:layout_centerInParent="true"/><!-- 组件居中:android:layout_centerInParent="true" --> <!-- 定义该组件位于view01组件的上方 -->
<TextView
android:id="@+id/view02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leaf"
android:layout_above="@id/view01"
android:layout_alignLeft="@id/view01"
/>
<!-- 定义该组件位于view01组件的下方 -->
<TextView
android:id="@+id/view03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leaf"
android:layout_below="@id/view01"
android:layout_alignLeft="@id/view01"
/>
<!-- 定义该组件位于view01组件的左边 -->
<TextView
android:id="@+id/view04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leaf"
android:layout_toLeftOf="@id/view01"
android:layout_alignTop="@id/view01"
/>
<!-- 定义该组件位于view01组件的右边 -->
<TextView
android:id="@+id/view05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leaf"
android:layout_toRightOf="@id/view01"
android:layout_alignTop="@id/view01"
/> </RelativeLayout>

com.example.relativelayouttest.MainActivity.java主程序

package com.example.relativelayouttest;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//setPadding相当于css里面的padding
findViewById(R.id.view01).setPadding(5, 5 , 5 , 5);
findViewById(R.id.view02).setPadding(5, 5 , 5 , 5);
findViewById(R.id.view03).setPadding(5, 5 , 5 , 5);
findViewById(R.id.view04).setPadding(5, 5 , 5 , 5);
findViewById(R.id.view05).setPadding(5, 5 , 5 , 5); } }