原创文章,欢迎转载。转载请注明来源:
http://blog.csdn.net/hust_twj/article/details/78857739
LayoutParams 是用 Java 代码来实现动态布局,它是 子控件 告诉 父控件 自己要如何布局时用的。
LayoutParams 类简单的描述了位置,宽和高,它们可以设置成下面的这三种值:
1. 一个确定的值;
2. MATCH_PARENT,即填满(和父容器一样大小);
3. WRAP_CONTENT,即包裹住组件就好。
下面分别说下两个常用到布局:
FrameLayout 下设置子控件 (btn
) 居中,在 Java 代码要这样动态实现:
FrameLayout.LayoutParams layoutParams = new
FrameLayout.LayoutParams(80,LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER;
btn.setLayoutParams(layoutParams);
RelativeLayout 下可通过addRule()
动态设置子控件 (btn
) 位置:
RelativeLayout.LayoutParams layoutParams = new
RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
btn.setLayoutParams(layoutParams);
RelativeLayout.LayoutParams.addRule()方法
正如上面代码所示,在使用RelativeLayout布局的时候,通常在载入布局之前在相关的XML文件中进行静态设置即可。但是,在有些情况下,我们需要动态的设置布局的属性,在不同条件下设置不同的布局排列方式。这个时候就需要使用到RelativeLayout.LayoutParams.addRule()方法,该方法有两种重载方法:
- addRule(int verb) :该方法表示所设置节点的属性不能与其他兄弟节点相关或者属性值为布尔值。比如 addRule(RelativeLayout.CENTER_VERTICAL)就表示在RelativeLayout中的相应节点是垂直居中的。
- addRule(int verb,int anchor):该方法表示所设置节点的属性必须关联其他兄弟节点或者属性值为布尔值。比如addRule(RelativeLayout.ALIGN_LEFT,R.id.date)就表示RelativeLayout中的相应节点放置在一个id值为date的兄弟节点的左边。
RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.main_layout);
RelativeLayout.LayoutParams lpview = new RelativeLayout.LayoutParams
(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lpview.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lpview.addRule(RelativeLayout.ABOVE, R.id.text);
GLSurfaceView glView = new GLSurfaceView(this);
mainLayout.addView(glView,lpview);