Без каких-либо изображений, чтобы показать, в чем собственно проблема, я могу только высказать свое лучшее предположение.
Скорее всего, ваша проблема связана с тем, что вы жестко задаете точные значения ширины и полей.
Пример того, что я имею в виду:
<Button
android:id="@+id/mosavy"
android:layout_width="170dp"
Вы даете точное значение dp для того, что вы хотите для ширины и полей.
Это нормально, если вы кодируете только одно конкретное устройство, но Android - это платформа, используемая на множестве устройств, где множество разных устройств имеют разные разрешения экрана.
Таким образом, 170dp может хорошо выглядеть на одном устройстве, но на другом устройстве оно будет выглядеть слишком большим или на другом устройстве может показаться слишком маленьким.
Из-за этого Android использует Dimensional Resources для решения этой проблемы.
Вы должны заметить файл dimens.xml
в папке values
вашего проекта приложения.
Внутри этого файла вы можете создать что-то вроде:
<dimen name="mosavy_height">170dp</dimen>
Затем вы можете заменить высоту в кнопке mosavy на:
<Button
android:id="@+id/mosavy"
android:layout_width="@dimen/mosavy_height"
Сделав это изменение,вы говорите системе подключить 170dp в ширину.
Но не думайте, что мы просто предпринимаем дополнительные шаги для выполнения той же задачи.Настоящая цель этого заключается в том, что вы можете объявить тот же mosavy_height
в dimens.xml
файле другой папки values
в вашем приложении.
Например, вы можете создать другую папку с именем values-xxxhdpi
, а затем поместить туда файл dimens.xml
со строкой:
<dimen name="mosavy_height">190dp</dimen>
Итак, теперь ваш файл макета будет подключенв 190dp в ширину, если разрешение телефона рассматривается в скобках xxxhdpi, и он подключит 170dp, если это не так, поскольку обычная папка values
без модификаторов в конце является значением по умолчанию.
Таким образом, внося подобные изменения, вы можете точно настроить макет, чтобы он выглядел одинаково на любом типе экрана на любом типе устройства.
Кроме того, вам не нужно помещать ваш RelativeLayout
внутрь ConstraintLayout
.Вы закодировали свой RelativeLayout
с намерением полностью растянуть его внутри экрана, что не дает ему никакой пользы внутри ConstraintLayout
.
Это как будто вы дарите рождественский подарок ребенку, но храните егокоробка внутри коробки.Поэтому ребенку придется дважды развернуть подарок, прежде чем он получит приз ... что неэффективно.
Поскольку ваш код предназначен для работы с RelativeLayout, вы можете избавиться от ConstraintLayout, не мешая вашему RelativeLayout.