通过代码设置布局参数
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); } } }
