ConstraintLayout以编程方式实现

8
我正在尝试以编程方式将视图添加到ConstraintLayout中。问题在于,ConstraintLayout.LayoutParams忽略了MATCH_CONSTRAINT,导致我的视图只是居中而没有达到最大宽度。
    TextView textView = new TextView(context);

    ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(MATCH_CONSTRAINT, WRAP_CONTENT);
    lp.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID;
    lp.topToTop = ConstraintLayout.LayoutParams.PARENT_ID;
    lp.rightToLeft = guideline.getId();
    lp.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID;

    textView.setLayoutParams(lp);
    textView.setText("Title text");
    textView.setBackgroundColor(Color.BLUE);

    constraintLayout.addView(textView);

请查看ConstraintSet文档。 - Dmitry Smolyaninov
是的,ConstraintSet解决了我的问题,但是很奇怪,layoutparams没有按预期工作。 - Near1999
是的...这很奇怪..LayoutParams对此无效。 - S Haque
1个回答

6
textView = new TextView(this);
textView.setId(R.id.text_id);
ConstraintSet set = new ConstraintSet();
set.clone(constraintLayout);
set.connect(textView.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
set.connect(textView.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);
set.connect(textView.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 0);
set.connect(textView.getId(), ConstraintSet.RIGHT, guideline.getId(), ConstraintSet.LEFT, 0);
textView.setText("Title text");
textView.setBackgroundColor(Color.BLUE);

constraintLayout.addView(textView);
set.applyTo(constraintLayout);

ID的XML值

<item name="text_id" type="id"/>

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