Android LayoutParams详解

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

其他细节:

1.设置布局参数时:

//这一句代码其实是子对父的,也就是父布局下的子控件要设置这句话
tv.setLayoutParams(params);  //给子View设置布局参数,它会带着参数告诉父View自己想要的布局位置以及大小 
  // 设置布局参数的gravity 方式
   params.gravity = Gravity.CENTER_VERTICAL;

ll.addView(tv);

//这句代码是针对父布局的.添加子View的同时,为子View设置布局位置及大小
ll.addView(tv, params);

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.LayoutParams类型错误:

  • 如果某View被LinearLayout包含,则该View的setLayoutParams参数类型必须是LinearLayout.LayoutParams。原因在于LinearLayout(或其他继承自ViewGroup的layout,如:RelativeLayout)在进行递归布局的时候,LinearLayout会获取子View的LayoutParams,并强制转换成LinearLayout.LayoutParams,如:
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) child.getLayoutParams();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值