android:使用layout()方法对控件定位的坑点

大家都知道layout()函数能够对调用它的view进行定位,然后就有小伙伴在实现拖动,或者点击事件中通过它进行对view进行位置设定,从而达到自己想要的效果。事实上这种做法是不值得提倡的。

layout()方法虽然可以对view自身进行定位,但该函数应该让父view调用从而确定view的位置而非我们自动调用去确定view的位置,比如在代码中直接使用button.layout(),或者在自定义的view中调用该方法的做法在思想上其实是错误的。它的确能够满足我们的需求(对view本身进行定位),但是问题在于当父容器刷新时,我们之前对view的定位将会作废(比如当输入法弹出的时候)。这是因为我们使用layout()方法对view进行定位的时候,layout方法并不会告知父容器自身的定位发生改变,即此时父容器中记录的该view的位置并没有任何改变。当父view更新的时候,对于该view的位置设置(onlayout()时)依旧和之前一样。

所以当我们给一个view的定位时,个人认为使用LayoutParams会比较好,当我们通过setLayoutParams()给view定位的时候,它能够通知父容器自身的定位发生改变,这样的话当父容器刷新时就不会影响我们之前给view的定位。关于setLayoutparams()如何通知父容器,小伙伴们可以看看源码(源码实现很简单)。

有错误之处欢迎大家指出,感激不尽。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值