线性布局中的约束布局无法正常工作

7
我需要以编程方式将一个视图(其根视图可以是任何东西)添加到LinearLayout中,但如果该视图是ConstraintLayout,它将无法按预期工作。为什么会发生这种情况呢?因为据我所知,子视图必须能够在其父视图的任何情况下正常工作。我该如何解决这个问题?
问题非常简单,但我找不到任何解决此问题的问题。
我附上截图以显示扭曲的视图: 原始视图 _____________________ 添加到线性布局内后的视图

enter image description here _______ enter image description here

这里是代码:

override fun setContentView(view: View?) {
    val toolbar = layoutInflater.inflate(R.layout.view_toolbar, null, false)
    titleView = toolbar.findViewById(R.id.title) as TextView

    val finalView = LinearLayout(this)
    finalView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
    finalView.orientation = LinearLayout.VERTICAL
    finalView.addView(toolbar)
    finalView.addView(view)
    super.setContentView(finalView)
}

我正在重写Activity的setContentView函数。


你尝试在finalView.addView(view)时显式设置LayoutParams了吗?你也可以将其权重设置为1,以便占用所有剩余空间。编辑:实际上,我非常确定LinearLayoutParams.weight=1是你想要的。 - mbonnin
重量?我真的应该尝试吗?因为重量与LinearLayout内部的ConstraintLayout表现奇怪无关。 - Bugs Happen
1
@mbonnin 你太棒了!它起作用了。虽然没有设置重量,但在添加视图时明确设置了“LayoutParams”。 - Bugs Happen
1个回答

5
事实证明,在LinearLayout内使用ConstraintLayout没有问题。我只需要在添加视图时显式添加LayoutParams即可。
override fun setContentView(view: View?) {
    val toolbar = layoutInflater.inflate(R.layout.view_toolbar, null, false)
    titleView = toolbar.findViewById(R.id.title) as TextView

    val finalView = LinearLayout(this)
    finalView.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
    finalView.orientation = LinearLayout.VERTICAL
    finalView.addView(toolbar)
    finalView.addView(view, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT))
    super.setContentView(finalView)
}

对我来说,我缺少方向感。 - green0range

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接