setTranslationX / Y和offsetLeftAndRight / offsetTopAndBottom之间的区别?

我正在使用ViewCompat.offsetLeftAndRightViewCompact.offsetTopAndBottom API使用子视图位置进行animation的ViewCompat.offsetLeftAndRight

当添加或从CoordinatorLayout删除子视图时,布局操作会将每个子项的位置重置为屏幕的左上angular,即没有任何偏移量。

本文通过在子视图上设置布局侦听器并恢复旧位置来提供解决scheme。

我注意到使用setTranslationXsetTranslationY API,这个问题不会发生。 家长布置事件后,孩子们保持自己的位置

我应该如何在这两套API之间做出决定,以在屏幕上安排我的观点? 如果不了解他们之间的差异,我会谨慎使用。 通过阅读官方文件,我没有得到很好的理解。

几个月后的一个相当古老的问题我没有几个解释:

首先是事情。 偏移将水平或垂直移动视图,类似于平移,但用于永久结果。

当你使用View#offsetTopAndBottom(int offset)它在内部具有这些function:

 mTop += offset; mBottom += offset; 

另一方面,tranlate是一个variables,除了这个顶部/底部/左/右位置之外还有一个variables,这个variables在animation中是非常方便的。

如果需要,这两种方法都会触发布局刷新。

Nick Butcher在这个不错的video中解释了更多: https : //www.youtube.com/watch?v= 86p1GPEv_fY&t =5m42s

关于CoordinatorLayout ,你是否有任何改变给孩子设置边距? 例如, BottomSheetBehavior不能很好地处理边界,因为它忽略了它们。 我想这可能是你的情况。