随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

有时候需要在代码里创建组件,尤其是在相对布局中需要设置组件之间的相对位置,包括组件相对父容器的位置,组件之间的位置,至于组件内部排列方式是可以用setGravity来实现的。下面针对前两种情况进行浅析,代码如下:

package com.home.testlayoutparams;

import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.app.Activity;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		RelativeLayout reLayout = new RelativeLayout(this);

		// 情况一:设置组件相对于父容器的位置
		// 按钮一
		Button btn1 = new Button(this);
		btn1.setText("按鈕1,父容器顶部水平居中");
		// 设置ID
		btn1.setId(1);
		// 参数
		RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		// 设置额外参数规则,位于父View顶部
		lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		// 相对于父View水平居中
		lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
		reLayout.addView(btn1, lp1);

		// 情况二:同级组件之间相对位置
		// 按钮二
		Button btn2 = new Button(this);
		btn2.setText("按鈕2,位于按钮一的下方左对齐");
		RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
				ViewGroup.LayoutParams.WRAP_CONTENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		// 位于按钮一的下方
		lp2.addRule(RelativeLayout.BELOW, 1);
		// 相对于按钮一左对齐
		lp2.addRule(RelativeLayout.ALIGN_LEFT, 1);
		reLayout.addView(btn2, lp2);
		setContentView(reLayout);
	}
}


注:上面的addRule(verb, anchor)方法,verb指定相对的“动作”或“行为”。anchor指定相对于“谁”。

1、如果是相对于父容器的话,anchor参数可以不要直接使用addRule(verb)。或者设置RelativeLayout.TRUE(它的值就是-1)。

2、如果是相对于同级控件的话,anchor参数为那个要相对的控件的ID。

3、如果anchor参数为0的话,表示这个规则不会运用到该控件的布局中。

另外将其余verb相关常量名列出:

relLayoutParams.alignWithParent=true  如果对应的兄弟元素找不到的话就以父元素做参照物

RelativeLayout.CENTER_HORIZONTAL   在父控件中水平居中

RelativeLayout.CENTER_VERTICAL   在父控件中垂直居中

RelativeLayout.CENTER_IN_PARENT  相对于父控件完全居中

RelativeLayout.ALIGN_PARENT_BOTTOM  紧贴父控件的下边缘

RelativeLayout.ALIGN_PARENT_TOP  紧贴父控件的上边缘

RelativeLayout.ALIGN_PARENT_LEFT紧贴父控件的左边边缘

RelativeLayout.ALIGN_PARENT_RIGHT  紧贴父控件的右边缘

RelativeLayout.ABOVE 在某元素的上方  需要第二个参数为某元素的ID

RelativeLayout.BELOW 在某元素的下方 需要第二个参数为 某元素的ID

RelativeLayout.LEFT_OF 在某元素的左边 需要第二个参数为某元素的ID

RelativeLayout.RIGHT_OF  在某元素的右边 需要第二个参数为 某元素的ID

RelativeLayout.ALIGN_TOP 本元素的上边缘和某元素的的上边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BOTTOM 本元素的上边缘和某元素的的下边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_LEFT  本元素的上边缘和某元素的的左边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_RIGHT  本元素的上边缘和某元素的的右边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BASELINE   本元素的基线和某元素的的基线对齐 需要第二个参数为某元素的ID

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐