通俗一点,一言以蔽之:主要用来动态控制子view的摆放位置
详细一点:
LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每个棋子都有一个位置的信息,如这个棋子在4行4列,这里的“4行4列”就是棋子的LayoutParams。
具体来看:
TextView textView = new TextView(context);
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
layoutParams.width=100;
layoutParams.height=200;
textView.setLayoutParams(layoutParams);
比如textview外层包裹着的是一个linearlayout,那么
LinearLayout.LayoutParams layoutParams1 = (LinearLayout.LayoutParams) textView.getLayoutParams();
//设置权重比例
layoutParams1.weight=1;
//设置上部间距
layoutParams1.topMargin=5;
//设置右边间距
layoutParams1.setMarginEnd(20);
//设置四周间距
layoutParams1.setMargins(3,3,3,3);
PS:
LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
1,一个确定的值;
2,FILL_PARENT,即填满(和父容器一样大小);
3,WRAP_CONTENT,即包裹住组件就好。
如果是RelativeLayout:
RelativeLayout.LayoutParams layoutParams1 = (RelativeLayout.LayoutParams) textView.getLayoutParams();
//设置位置居中
layoutParams1.addRule(RelativeLayout.CENTER_IN_PARENT);
//设置在某一个id所对应的view的右边
layoutParams1.addRule(RelativeLayout.RIGHT_OF, R.id.all);
layoutParams1.topMargin=5;
layoutParams1.setMarginEnd(20);
layoutParams1.setMargins(3,3,3,3);
layoutParams1.removeRule(RelativeLayout.CENTER_IN_PARENT);
如果是FrameLayout:
FrameLayout.LayoutParams layoutParams1 = (FrameLayout.LayoutParams) textView.getLayoutParams();
//设置位置居中
layoutParams1.gravity = Gravity.CENTER;
layoutParams1.topMargin = 5;
layoutParams1.setMarginEnd(20);
layoutParams1.setMargins(3, 3, 3, 3);