如何以编程方式将视图和约束添加到ConstraintLayout?

Ker*_*ker 40 java android android-layout android-constraintlayout

我有一个问题,以编程方式向a添加视图ConstraintLayout,并设置布局工作所需的所有约束.

我现在拥有的东西不起作用:

ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.mainConstraint);
ConstraintSet set = new ConstraintSet();
set.clone(layout);

ImageView view = new ImageView(this);
layout.addView(view,0);
set.connect(view.getId(), ConstraintSet.TOP, layout.getId(), ConstraintSet.TOP, 60);
set.applyTo(layout);
Run Code Online (Sandbox Code Playgroud)

ImageView甚至没有出现在布局.添加到a时RelativeLayout,它就像一个魅力.

我可以做些什么来创建我需要的约束,以便我的布局再次工作?

rer*_*hhh 67

我认为你应该在添加ImageView后克隆布局.

ConstraintLayout layout = (ConstraintLayout)findViewById(R.id.mainConstraint);
ConstraintSet set = new ConstraintSet();

ImageView view = new ImageView(this);
view.setId(View.generateViewId());
layout.addView(view,0);
set.clone(layout);
set.connect(view.getId(), ConstraintSet.TOP, layout.getId(), ConstraintSet.TOP, 60);
set.applyTo(layout);
Run Code Online (Sandbox Code Playgroud)

  • 为什么这样做?一些解释将不胜感激.谢谢! (9认同)
  • @YonahKarp您首先将所有子项添加到约束布局中,然后将其克隆到集合中,因此包含了您添加的所有视图.我想指出你需要以编程方式设置你的id,否则所有getId()都将返回-1 (8认同)
  • 我花了这么多小时,解决方案太简单了,文档中有什么地方指出了这一点?你怎么会知道这事? (2认同)
  • 它给了我异常: java.lang.RuntimeException: All Children of ConstraintLayout must have ids to use ConstraintSet (2认同)