Android中文API(99)—— RelativeLayout
正文 一、结构 public classRelativeLayout extendsViewGroup java.lang.Object android.view.View android.view.ViewGroup android.widget.RelativeLayout 直接子类 DialerFilter, TwoLineListItem 二、概述 RelativeLayout顾名思义,相对布局,在这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位。 注意,不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为ALIGN_PARENT_BOTTOM。 (译者注:这点额外要注意,当然这也很好理解,如果容器是不定高的,那么子元素当然无法对齐容器的底边^_^)。 可以参考官方 SDK 中的 RelativeLayout 教学贴 Relative Layout tutorial 三、常量 数据类型 常量名称 描述 int ABOVE 定义将元素的底边对齐另一个元素的顶边 int ALIGN_BASELINE 定义将元素基线的对齐另一个元素的基线 int ALIGN_BOTTOM 定义将元素底边的对齐另一个元素的底边 int ALIGN_LEFT 定义将元素的左边对齐另一个元素的左边 int ALIGN_PARENT_BOTTOM 定义将元素的底边对齐其父容器(RelativeLayout)的底边 int ALIGN_PARENT_LEFT 定义将元素的左边对齐其父容器(RelativeLayout)的左边 int ALIGN_PARENT_RIGHT 定义将元素的右边对齐其父容器(RelativeLayout)的右边 int ALIGN_PARENT_TOP 定义将元素的顶边对齐其父容器(RelativeLayout)的顶边 int ALIGN_RIGHT 定义将元素的右边对齐另一个元素的右边 int ALIGN_TOP 定义将元素的顶边对齐另一个元素的顶边 int BELOW 定义将元素的顶边对齐另一个元素的底边 int CENTER_HORIZONTAL 定义让元素在容器(RelativeLayout)内水平居中 int CENTER_IN_PARENT 定义让元素位于容器(RelativeLayout)的中心 int CENTER_VERTICAL 定义让元素在容器(RelativeLayout)内垂直居中 int LEFT_OF 定义将元素的右边对齐另一个元素的左边 int RIGHT_OF 定义将元素的左边对齐另一个元素的右边 int TRUE 四、内部类 Class RelativeLayout.LayoutParams 和RelativeLayout相关联的布局信息. 五、XML属性 属性名称 描述 android:gravity 设置容器中的内容该如何定位。对象本身的x和y轴。 android:ignoreGravity 设置容器中的哪个子元素会不受Gravity的影响. (译者注:接收参数:子元素的Id,如果设置成为0,则全部子元素都会受到影响) 六、公共方法 public booleandispatchPopulateAccessibilityEvent(AccessibilityEvent event) 分发AccessibilityEvent事件到该View的子视图中。 参数 event 事件本身. 返回值 如果事件分发完成,返回真。 public RelativeLayout.LayoutParamsgenerateLayoutParams(AttributeSet attrs) 返回一个新的已设置属性集合的布局参数。 参数 attrs 构建layout布局参数的属性集合. 返回值 一个RelativeLayout.LayoutParams的实例或者他的一个子类 public intgetBaseline() 返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐,这个方法返回-1。 返回值 基准线的偏移量,如果不支持基准线对齐则返回-1 public voidrequestLayout() 当容器中的某个视图发生改变,会影响整个布局时,就调用这个方法,他会改变整个视图树的布局。 public voidsetGravity(int gravity) 描述子视图该如何摆放,默认值是Gravity.LEFT | Gravity.TOP(译者注:说明RelativeLayout的元素如果不设置位置,会从左上角开始堆叠)。 参数 gravity 位置值,可以参考Gravity 相关的XML属性 android:gravity 参见 setHorizontalGravity(int) setVerticalGravity(int) public voidsetHorizontalGravity(int horizontalGravity) public voidsetVerticalGravity(int verticalGravity)) public voidsetIgnoreGravity(int viewId) 定义容器中的那个VIew会忽略容器设置的Gravity,如果容器设置的Gravity是Gravity.LEFT | Gravity.TOP时,定义这个属性没有任何效果。 参数 viewId将要忽略容器Gravity的视图的id,设置为0则不会有任何View忽略Gravity. 相关的XML属性 android:ignoreGravity 参见 setGravity(int) 七、受保护方法 protected booleancheckLayoutParams(ViewGroup.LayoutParams p) (译者注:检测是不是AbsoluteLayout.LayoutParams的实例) protected ViewGroup.LayoutParams generateDefaultLayoutParams() 返回一组宽度为WRAP_CONTENT,高度为WRAP_CONTENT,坐标是(0,0)的布局参数。 返回值 一组默认的布局参数或null值。 protected ViewGroup.LayoutParamsgenerateDefaultLayoutParams( ViewGroup .LayoutParams p) 返回一组合法的受支持的布局参数。当一个ViewGroup传递一个布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)检测的视图时,此方法被调用。此方法会返回一组新的适合当前ViewGroup的布局参数,可能从指定的一组布局参数中复制适当的属性。 参数 p 被转换成一组适合当前ViewGroup的布局参数. 返回值 一个ViewGroup.LayoutParams的实例或者其中的一个子节点 protected voidonLayout(boolean changed, int l, int t, int r, int b) 在此视图view给他的每一个子元素分配大小和位置时调用。派生类可以重写此方法并且重新安排他们子类的布局。 参数 changed这是当前视图view的一个新的大小或位置 l相对于父节点的左边位置 t相对于父节点的顶点位置 r相对于父节点的右边位置 b相对于父节点的底部位置 public voidonMeasure(int widthMeasureSpec, int heightMeasureSpec) 测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。 约定:当重写此方法时,你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常,是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。 父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。 如果此方法被重写,那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度(getSuggestedMinimumHeight() and getSuggestedMinimumWidth()),使用这两个方法可以取得最小宽度和最小高度。 参数 widthMeasureSpec 强加于父节点的横向空间要求。要求是使用View.MeasureSpec进行编码。 heightMeasureSpec强加于父节点的纵向空间要求。要求是使用View.MeasureSpec进行编码。 八、补充 文章精选 [Android学习指南]相对布局RelativeLayout Android RelativeLayout属性 RelativeLayout排版_免寫程式[blogspot] 示例代码 <? xmlversion="1.0"encoding="utf-8" ?> < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < TextView android:id ="@+id/label" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="Typehere:" /> < EditText android:id ="@+id/entry" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:background ="@android:drawable/editbox_background" android:layout_below ="@id/label" /> < Button android:id ="@+id/ok" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:layout_below ="@id/entry" android:layout_alignParentRight ="true" android:layout_marginLeft ="10dip" android:text ="OK" /> < Button android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:layout_toLeftOf ="@id/ok" android:layout_alignTop ="@id/ok" android:text ="Cancel" /> </ RelativeLayout > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582395,如需转载请自行联系原作者