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



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

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

给我带来了一些麻烦。我会一点一点地打开它:

1-函数setLayoutParams一开始引发了异常,因为我使用的是FrameLayout.LayoutParams而不是ConstraintLayout.Layout。我之所以这么说,是因为在includeExteriorFrame的声明中,我将其声明为FrameLayout,但正如您所见,LayoutParams被声明为ConstraintLayout。为什么这样做?是因为FrameLayout在ConstraintLayout内吗?

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

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

非常感谢您的关注。

由于帖子上的第一条评论,我找到了解决方案。解决方案是应用我设置的约束条件:

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);

最新更新