ConstraintLayout:如何以编程方式添加多个视图?

时间:2017-01-15 21:34:37

标签: java android android-layout android-constraintlayout

我想在ConstraintLayout中添加2个按钮。我目前的代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    //Button 1: 
    Button button = new Button(this);
    button.setText("Hello");
    layout.addView(button);

    set.connect(button.getId(), ConstraintSet.LEFT, layout.getId(), ConstraintSet.LEFT, 0);
    set.connect(button.getId(), ConstraintSet.RIGHT, layout.getId(), ConstraintSet.RIGHT, 0);
    set.connect(button.getId(), ConstraintSet.BOTTOM, layout.getId(), ConstraintSet.BOTTOM, 0);
    set.constrainWidth(button.getId(), ConstraintSet.MATCH_CONSTRAINT);
    set.constrainHeight(button.getId(), 200);
    set.applyTo(layout);


    //Button 2:     
    Button newButton = new Button(this);
    newButton.setText("Yeeey");
    layout.addView(newButton);

    set.connect(newButton.getId(), ConstraintSet.BOTTOM, button.getId(), ConstraintSet.TOP, 0);
    set.connect(newButton.getId(), ConstraintSet.LEFT, button.getId(), ConstraintSet.LEFT, 0);
    set.connect(newButton.getId(), ConstraintSet.RIGHT, button.getId(), ConstraintSet.RIGHT, 0);
    set.constrainHeight(newButton.getId(), 200);
    set.applyTo(layout);

}

但我只得到1个可见按钮(另一个可能隐藏在这个按钮后面),它位于屏幕的左上角。屏幕底部应该有两个按钮相互链接。

我在这里做错了什么?

enter image description here

期望的结果:

enter image description here

1 个答案:

答案 0 :(得分:12)

以下是您想要实现的工作代码

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.activity_main);
        ConstraintSet set = new ConstraintSet();
        set.clone(layout);

        //Button 1:
        Button button = new Button(this);
        button.setText("Hello");
        button.setId(100);           // <-- Important
        layout.addView(button);
        set.connect(button.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);
        set.connect(button.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);
        set.connect(button.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);
        set.constrainHeight(button.getId(), 200);
        set.applyTo(layout);


        //Button 2:
        Button newButton = new Button(this);
        newButton.setText("Yeeey");
        layout.addView(newButton);
        set.connect(newButton.getId(), ConstraintSet.BOTTOM, button.getId(), ConstraintSet.TOP, 0);
        set.connect(newButton.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0);
        set.connect(newButton.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0);
        set.constrainHeight(newButton.getId(), 200);
        set.applyTo(layout);


    }

重要:
如果未明确设置id,则所有元素将获得相同的id(-1)。