Макет по умолчанию, который вы получаете при создании нового файла макета, называется ConstraintLayout
.Если вы хотите разместить какие-либо из ваших представлений (Buttons
, TextViews
и т. Д.) Внутри него, вам придется ограничить их другими представлениями или окном, в противном случае они перейдут в верхний левый угол внутри вашего приложения.
Я предполагаю, что вы только что добавили 2 Buttons
с помощью графического дизайнера и поместили их в центр макета, не ограничивая их ничем, поэтому внутри XML-файла они должны выглядеть примерно так:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="132dp"
tools:layout_editor_absoluteY="156dp" />
Android Studio должна отображать предупреждение при наведении курсора на <Button
об отсутствии ограничений.Последние 2 строки xml предназначены для позиционирования вашего представления внутри дизайнера, но они не отражают позиционирование внутри вашего приложения.Если вы хотите расположить виды, вы должны ограничить их другими видами, например:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
Теперь кнопка ограничена своим родителем со всех 4 сторон, что означает, что она будет центрирована по горизонтали и вертикали внутриэто родитель.Макет с двумя центрированными кнопками может выглядеть следующим образом:
<Button
android:id="@+id/topButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Top button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottomButton"
app:layout_constraintVertical_chainStyle="packed"
/>
<Button
android:id="@+id/bottomButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/topButton"
app:layout_constraintBottom_toBottomOf="parent"
/>
Как вы можете видеть, Buttons
связаны друг с другом.Если вы хотите использовать RelativeLayout
, вы можете просто изменить корневой макет вашего XML-файла с android.support.constraint.ConstraintLayout
на RelativeLayout
.
Лично я бы порекомендовал узнать, как использовать ConstraintLayout
, потому что этосамый мощный макет и тот, который Google пытается заставить всех использовать.