gpt4 book ai didi

android - 以编程方式在 MotionLayout 中设置边距

转载 作者:行者123 更新时间:2023-12-03 14:25:09 27 4
gpt4 key购买 nike

我有一些 View 需要以编程方式设置一些边距(来自 applyWindowInsets 监听器),但 View 似乎忽略了我用代码设置的任何边距,即使我没有为边距设置动画。

我可以很好地设置填充,但我不能只使用填充来完成我需要的事情。

这个问题似乎与 MotionLayout 有关,因为如果它是一个 ConstraintLayout,它就可以正常工作。

我一直在使用这个 util 方法。

public static void addTopMargin(View v, int margin) {
((ViewGroup.MarginLayoutParams) v.getLayoutParams()).topMargin += margin;
}

最佳答案

您遇到的问题是 MotionLayout从分配的 ConstraintSets 中得出其边距,因此更改基本边距实际上并没有做任何事情。要使其工作,您需要定位 ConstraintSets 中的一个或两个定义MotionScene :

val motionLayout = findViewById(R.id.motionLayoutId)
motionLayout.getConstraintSet(R.id.startingConstraintSet)?
.setMargin(targetView.id, anchorId, value)

您也可以使用 let 对多个 View 执行此操作:
val motionLayout = findViewById(R.id.motionLayoutId)
motionLayout.getConstraintSet(R.id.startingConstraintSet)?.let {
setMargin(firstView.id, anchorId, value)
setMargin(secondView.id, anchorId, value)
}

对于上边距,使用 ConstraintSet.TOP , ETC。

请记住,如果您不想为该边距设置动画,则必须将开始和结束都分配给 ConstraintSet .

关于android - 以编程方式在 MotionLayout 中设置边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com