【问题标题】:Using setLayoutParams on an element sticks it to the top of the screen [duplicate]在元素上使用 setLayoutParams 会将其粘贴到屏幕顶部 [重复]
【发布时间】:2022-03-11 17:51:42
【问题描述】:

我正在尝试将元素的高度设置为在 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 变量设置两个维度,设置其他组件以及我试图调整大小的组件,我一直在寻找一个更好的函数,它不会得到元素卡住了,但我找不到任何东西,所以我决定问这个。如果需要,可以提供更多信息。

非常感谢您的关注。

【问题讨论】:

标签: java android android-layout


【解决方案1】:

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

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

【讨论】:

  • 我要等 2 天过去
猜你喜欢
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多