Android программные и XML ограничения разные

Я уже потратил некоторое время на поиск решения этой проблемы.

В методе действий onCreate я создаю две кнопки и устанавливаю их ограничения. Но когда это делается в XML, одни и те же ограничения выглядят по-разному.

XML: изображение ограничений XML

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:text="Button 1"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:text="Button 2"
    app:layout_constraintLeft_toRightOf="@+id/button"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Программно: Программные ограничения изображения

    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);

Я прочитал это Программно, соединяя несколько представлений, заданных для любого размера, используя ConstraintLayout, но это было просто неправильное соединение, и я не вижу ничего плохого в моих соединениях, проверил его несколько раз.

1 ответ

Решение

Проблема в том, что для кнопки вы не задали ни одного идентификатора, поэтому она используется как идентификатор представления по умолчанию View.NO_ID, Так что если вы измените идентификатор кнопки, она будет работать нормально.

Попробуйте добавить идентификатор для button1, как показано в примере ниже, он будет работать так, как вы ожидали.

btn1.setId(View.generateViewId());
Другие вопросы по тегам