lbe*_*tto 7 android android-motionlayout
我有一些视图需要以编程方式设置一些边距(来自 applyWindowInsets 侦听器),但这些视图似乎忽略了我用代码设置的任何边距,即使我没有为边距设置动画。
我可以很好地设置填充,但是仅使用填充无法完成我需要的操作。
该问题似乎与 MotionLayout 相关,因为如果它是 ConstraintLayout,它就可以正常工作。
我一直在使用这个 util 方法。
public static void addTopMargin(View v, int margin) {
((ViewGroup.MarginLayoutParams) v.getLayoutParams()).topMargin += margin;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您遇到的问题是MotionLayout它的边距来自分配的ConstraintSets,因此更改基本边距实际上并没有做任何事情。要使其发挥作用,您需要针对以下ConstraintSets定义之一或两者MotionScene:
val motionLayout = findViewById(R.id.motionLayoutId)
motionLayout.getConstraintSet(R.id.startingConstraintSet)?
.setMargin(targetView.id, anchorId, value)
Run Code Online (Sandbox Code Playgroud)
您也可以使用以下命令为多个视图执行此操作let:
val motionLayout = findViewById(R.id.motionLayoutId)
motionLayout.getConstraintSet(R.id.startingConstraintSet)?.let {
setMargin(firstView.id, anchorId, value)
setMargin(secondView.id, anchorId, value)
}
Run Code Online (Sandbox Code Playgroud)
对于上边距,请使用ConstraintSet.TOP等。
请记住,如果您不想为该边距设置动画,则必须同时分配 start 和 end ConstraintSet。
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |