在元素上使用 setLayoutParams 将其粘在屏幕顶部

Using setLayoutParams on an element sticks it to the top of the screen

我正在尝试将元素的高度设置为在 18:9 屏幕上更长,而且它的工作方式很有趣。这行代码

includeExteriorFrame.setLayoutParams(new ConstraintLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getResources().getDimensionPixelSize(R.dimen._420sdp)));

给我带来了一些麻烦。我会逐点解压:

1 - 函数 setLayoutParams 起初抛出异常,因为我使用的是 FrameLayout.LayoutParams 而不是 ConstraintLayout.LayoutParams。我之所以这样说,是因为在 includeExteriorFrame 的声明中,我将其声明为 FrameLayout,但如您所见,LayoutParams 被声明为 ConstraintLayout。为什么这行得通?是因为FrameLayout在ConstraintLayout里面吗?

2.- 当我调整元素大小时,它们会粘在屏幕顶部。我想这与调整大小如何更新元素有关。之后我尝试设置元素约束,但没有用,它们真的卡在了顶部。

我已经测试了这个问题的许多解决方案,比如使用纯 int 变量设置两个维度,设置其他组件以及我正在尝试调整大小的组件,我一直在寻找一个更好的函数,但不会让元素卡住,但我找不到任何东西,所以我决定问这个。如果需要,可以提供更多信息。

非常感谢您的关注。

感谢 post 上的第一条评论,我找到了解决方案。解决方案是应用我设置的约束,如下所示:

ConstraintSet constraintSet = new ConstraintSet();            
ConstraintLayout constraintLayout = (ConstraintLayout) includeExteriorFrame.getParent();
constraintSet.clone(constraintLayout);
constraintSet.connect(includeExteriorFrame.getId(),ConstraintSet.BOTTOM,includeFrame.getId(),ConstraintSet.TOP);
constraintSet.connect(includeExteriorFrame.getId(),ConstraintSet.TOP,includeExteriorFrameParent.getId(),ConstraintSet.TOP);
constraintSet.applyTo(constraintLayout);