我有两个按钮validate和notify,如下面的XML图像所示。
我想以编程方式在通知按钮下方显示验证按钮。如下图所示
我已经实现了Kotlin代码和代码snipped下面提到:
fun changeConstraint() {
val valetBtnParent = binding.root.findViewById<ConstraintLayout>(R.id.childLayout)
ConstraintSet().apply {
val layoutParams = ConstraintLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT)
clone(valetBtnParent)
clear(R.id.button_validate, ConstraintSet.END)
clear(R.id.button_validate, ConstraintSet.BOTTOM)
clear(R.id.button_validate, ConstraintSet.START)
connect(R.id.button_validate, ConstraintSet.BOTTOM, R.id.detail_cardview, ConstraintSet.TOP, ZERO)
connect(R.id.button_validate, ConstraintSet.END, R.id.detail_cardview, ConstraintSet.END, ZERO)
connect(R.id.button_validate, ConstraintSet.START, R.id.button_notify, ConstraintSet.BOTTOM, TWO_HUNDRED)
applyTo(childLayout)
}
}
请救救我吧!
2条答案
按热度按时间ttisahbt1#
您忽略了一个非常重要的事情,那就是XML布局,这在
ContraintLayout
动画中非常重要,因为它告诉您现有的约束是什么,但让我们只处理提供的代码:这似乎是预期结果:
要实现这一目标:您必须清除
button_notify
的button_validate
和Start
(以及Bottom
,如果正在使用)的Top
、Bottom
和End
约束。为此,您可以将代码更改为:
假设
detail_cardview
在这些按钮下面,上面的代码应该可以正常工作。要在更改约束时添加动画,请将以下行粘贴到包含
applyTo()
的最后一行上方:如果需要添加动画监听器,您可以查看我对
ConstraintSet
动画here的其他回答。因为你已经在使用视图绑定了,所以没有使用静态ID的逻辑,我也把它们改成了绑定ID。虽然你的代码不完整,但是应该可以工作。如果有什么地方遗漏了,一定要告诉我。
另外,要实现GIF中所看到的输出,我使用的GIF代码如下:
omhiaaxx2#
在我看来,最简单的方法是将它们插入线性布局,并将方向从水平更改为垂直。