Android studio 3.1.2 Дизайн приложения отличается от того, что работает на устройстве - PullRequest
0 голосов
/ 29 мая 2018

Я только начал изучать разработку приложений и создал приложение с 2 кнопками в центре экрана, 1 под другой, используя вкладку «Дизайн» в файле XML.Но когда я запускаю его на своем устройстве, отображается только вторая кнопка, и она тоже, как в левом верхнем углу.Может кто-нибудь, пожалуйста, помогите мне (начинающий).Также, пожалуйста, скажите, как изменить его на относительное расположение!

Снимок экрана

enter image description here

1 Ответ

0 голосов
/ 29 мая 2018

Макет по умолчанию, который вы получаете при создании нового файла макета, называется 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 пытается заставить всех использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...