Android 动态修改ConstrainLayout

如果需要修改组件大小可以使用ConstraintLayout.LayoutParams

ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(width,height);
holder.catView.setLayoutParams(paramsView);

但是有个问题,这样修改完父布局后,子布局与父布局间的位置关系好像不会更新,必须使ConstraintLayout.MarginLayoutParams,

不过我是用这个方法也没成功,不知道为啥

ConstraintLayout.MarginLayoutParams marginLayoutParams = new ConstraintLayout.MarginLayoutParams(((ConstraintLayout.LayoutParams)holder.catName.getLayoutParams()));
marginLayoutParams.setMargins(5,height,0,0);

marginLayoutParams.setMarginStart(height);
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(marginLayoutParams);
layoutParams.height = (int)(height*0.2);
layoutParams.width = width;
holder.catName.setLayoutParams(layoutParams);

上面的代码并没有修改margin,网上找得方法试了也没有,不知道为啥会这样

于是就用了ConstraintSet,这个还是好用的

        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.clone((ConstraintLayout) holder.catView);
        constraintSet.setMargin(R.id.cat_name,ConstraintSet.TOP,height);
        constraintSet.applyTo((ConstraintLayout) holder.catView);

这里的如果要在原来的布局上加入或修改限制一定要用clone,否则applyTo会直接用新的布局覆盖旧的,导致有一些东西丢失(applyTo是覆盖旧布局,而不是在旧布局上添加)

 

不知道为啥写android总是有一些这种简单问题卡几个小时,头大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值