有时候需要在代码里创建组件,尤其是在相对布局中需要设置组件之间的相对位置,包括组件相对父容器的位置,组件之间的位置,至于组件内部排列方式是可以用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