Android编程约束和XML约束是不同的

Android编程约束和XML约束是不同的,android,android-constraintlayout,programmatically-created,Android,Android Constraintlayout,Programmatically Created,我已经花了一些时间来解决这个问题 在活动的onCreate方法中,我创建了两个按钮并设置它们的约束。但在xml中执行此操作时,相同的约束看起来不同 XML: 我读过这篇文章,但那只是一个错误的连接,我没有看到我的连接有任何错误,我检查了多次。问题是,两个按钮都没有设置任何id,因此它采用默认视图id视图。没有id,因此如果您更改按钮的id,它将正常工作 尝试将id添加到按钮1,如下面的示例所示,它将按照您的预期工作 btn1.setId(View.generateViewId()); thx,

我已经花了一些时间来解决这个问题

在活动的onCreate方法中,我创建了两个按钮并设置它们的约束。但在xml中执行此操作时,相同的约束看起来不同

XML:


我读过这篇文章,但那只是一个错误的连接,我没有看到我的连接有任何错误,我检查了多次。

问题是,两个按钮都没有设置任何id,因此它采用默认视图id
视图。没有id
,因此如果您更改按钮的id,它将正常工作

尝试将id添加到按钮1,如下面的示例所示,它将按照您的预期工作

btn1.setId(View.generateViewId());

thx,我对编程android应用程序还不熟悉,但我已经编程了一些应用程序,但没有在运行时添加视图。希望这能奏效。我一到家就试试
    Button btn1 = new Button(this);
    Button btn2 = new Button(this);
    btn1.setText("Button 1");
    btn2.setText("Button 2");

    layout.addView(btn1);
    layout.addView(btn2);

    ConstraintSet set = new ConstraintSet();
    set.clone(layout);

    set.connect(btn1.getId(), ConstraintSet.LEFT, layout.getId(), ConstraintSet.LEFT, 8);
    set.connect(btn1.getId(), ConstraintSet.TOP, layout.getId(), ConstraintSet.TOP, 8);
    set.connect(btn2.getId(), ConstraintSet.LEFT, btn1.getId(), ConstraintSet.RIGHT, 8);
    set.connect(btn2.getId(), ConstraintSet.TOP, layout.getId(), ConstraintSet.TOP, 8);
    set.connect(btn2.getId(), ConstraintSet.RIGHT, layout.getId(), ConstraintSet.RIGHT, 8);
    set.applyTo(layout);
btn1.setId(View.generateViewId());