随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。
有时候需要在代码里创建组件,尤其是在相对布局中需要设置组件之间的相对位置,包括组件相对父容器的位置,组件之间的位置,至于组件内部排列方式是可以用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