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