RelativeLayout中控件的位置一般用xml文件进行静态控制,但是如何在代码中动态控制子元素的位置呢?
用控件对应的LayoutParams中的addRule(RelativeLayout.CENTER_IN_PARENT)方法即可。
RelativeLayout.LayoutParams.addRule()方法,该方法有两种重载方式:
1、addRule(int verb) :用此方法时,所设置节点的属性不能与其它兄弟节点相关联或者属性值为布尔值(布尔值的属性,设置时表示该属性为true,不设置就默认为false),比如:addRule(RelativeLayout.CENTER_VERTICAL) 就表示在RelativeLayout中的相应节点是垂直居中的。
2、addRule(int verb, int anchor) :该方法所设置节点的属性必须关联其它的兄弟节点或者属性为布尔值( 属性为布尔值时,anchor为RelativeLayout.TRUE表示true,anchor为0表示false),比如:addRule(RelativeLayout.ALIGN_LEFT,R.id.date)就表示 RelativeLayout中的相应节点放置在一个id值为date的兄弟节点的左边。
eg:
//实例化一个RelativeLayout
RelativeLayout myRL = new RelativeLayout(this);
//创建一个TextView
TextView tv = new TextView(this);
tv.setText("hello");
//创建一个LayoutParams
RelativeLayout.LayoutParams myParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
//调用addRule方法设置相关属性
myParams.addRule(RelativeLayout.CENTER_IN_PARENT);//居中
//把TextView添加进RelativeLa
myRL.addView(tv, myParams);
//最后可以将RelativeLayout设置给Activityyout布局中
this.setContentView(myRL);