相对布局(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
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent"> 5 6 <!-- 定义该组件位于父容器中间 --> 7 <TextView android:id="@+id/view01" 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:background="@drawable/leaf" 11 android:layout_centerInParent="true"/><!-- 组件居中:android:layout_centerInParent="true" --> 12 13 <!-- 定义该组件位于view01组件的上方 --> 14 <TextView 15 android:id="@+id/view02" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:background="@drawable/leaf" 19 android:layout_above="@id/view01" 20 android:layout_alignLeft="@id/view01" 21 /> 22 <!-- 定义该组件位于view01组件的下方 --> 23 <TextView 24 android:id="@+id/view03" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:background="@drawable/leaf" 28 android:layout_below="@id/view01" 29 android:layout_alignLeft="@id/view01" 30 /> 31 <!-- 定义该组件位于view01组件的左边 --> 32 <TextView 33 android:id="@+id/view04" 34 android:layout_width="wrap_content" 35 android:layout_height="wrap_content" 36 android:background="@drawable/leaf" 37 android:layout_toLeftOf="@id/view01" 38 android:layout_alignTop="@id/view01" 39 /> 40 <!-- 定义该组件位于view01组件的右边 --> 41 <TextView 42 android:id="@+id/view05" 43 android:layout_width="wrap_content" 44 android:layout_height="wrap_content" 45 android:background="@drawable/leaf" 46 android:layout_toRightOf="@id/view01" 47 android:layout_alignTop="@id/view01" 48 /> 49 50 </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); } }