Android LayoutParams详解
ONE Goal,ONE Passion !
LayoutParams使用的并不是很多,我们一般都会在布局文件中直接写布局,这样代码看起来比较清爽.可是有时不得不用代码去设置布局参数.下面就看看如何使用LayoutParams吧.
1,先来看看LayoutParams的解释:
LayoutParams继承于Android.View.ViewGroup.LayoutParams.
LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
但LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
1,一个确定的值;
2,FILL_PARENT,即填满(和父容器一样大小);
3,WRAP_CONTENT,即包裹住组件就好。
2,看代码如何使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建一个线性布局
LinearLayout ll = new LinearLayout(this);
//设置线性布局在Activity中的布局参数
LinearLayout.LayoutParams ll_param = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//创建一个textView
TextView tv = new TextView(this);
//设置textView的在ll中布局参数,注意---设置时尽量写父View.LayoutParams. 如:LinearLayout.LayoutParams
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
tv.setText("我是通过代码创建Text");
//将tv添加到ll中--2种方式
// tv.setLayoutParams(params); ll.addView(tv);
ll.addView(tv, params);
//将ll布局添加到activity所在ContentView中
this.setContentView(ll, ll_param);
}
其他细节:
1.设置布局参数时:
//这一句代码其实是子对父的,也就是父布局下的子控件要设置这句话
tv.setLayoutParams(params); //给子View设置布局参数,它会带着参数告诉父View自己想要的布局位置以及大小
// 设置布局参数的gravity 方式
params.gravity = Gravity.CENTER_VERTICAL;
ll.addView(tv);
//这句代码是针对父布局的.添加子View的同时,为子View设置布局位置及大小
ll.addView(tv, params);
2.LayoutParams类型错误:
- 如果某View被LinearLayout包含,则该View的setLayoutParams参数类型必须是LinearLayout.LayoutParams。原因在于LinearLayout(或其他继承自ViewGroup的layout,如:RelativeLayout)在进行递归布局的时候,LinearLayout会获取子View的LayoutParams,并强制转换成LinearLayout.LayoutParams,如:
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) child.getLayoutParams();