通过代码设置布局参数
1)只有添加到父控件中之后,才能获取布局参数,要不然会报空指针。getLayoutParams(), addView()
2)换一种写法:
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tv.getLayoutParams();
params.setMargins(50, 0, 0, 0);
此时不用再调用setLayoutParams()方法,因为获取的params本身就是tv的布局参数。(直接new布局参数对象)
3)注意是哪个包下的布局参数,一定要注意。
4)理解:
tv = (TextView) findViewById(R.id.tv);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tv.getLayoutParams();
getLayoutParams();获取的是哪个包下的布局参数?
此控件所在的父布局(离此控件所在的父布局)
1)在布局文件中,通过xml设置margin值;
2)在Activity中通过java代码设置margin值两种形式
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tv.getLayoutParams();
//通过代码动态设置边距
params.setMargins(20, 50, 20, 20);
5)LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
但LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
1,一个确定的值;
2,FILL_PARENT,即填满(和父容器一样大小);
3,WRAP_CONTENT,即包裹住组件就好。
代码如下:
package com.example.tuhuadmin.fanxinglei.widget;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.tuhuadmin.fanxinglei.R;
import com.example.tuhuadmin.fanxinglei.utils.DensityUtils;
/**
* Created on 2016/8/16.
* Author:crs
* Description:通过代码设置布局参数
*/
public class AddChildViewActivity extends BaseActivity {
private LinearLayout ll_gifts;
String gerRule[] = {"满100减9", "满1000减9", "满1000减91"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_child);
ll_gifts = (LinearLayout) findViewById(R.id.ll_gifts);
initView(gerRule);
}
private void initView(String gerRule[]) {
int length = 2;
int textSizePX = DensityUtils.sp2px(this, 5);
for (int i = 0; i < length; i++) {
String str = gerRule[i];
TextView tv = new TextView(this);
tv.setTextSize(textSizePX);
tv.setBackgroundResource(R.drawable.shape);
tv.setTextColor(Color.parseColor("#df3348"));
tv.setPadding(50, 50, 50, 50);
tv.setText(str);
ll_gifts.addView(tv);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(50, 0, 0, 0);
tv.setLayoutParams(params);
}
}
}