android ConstraintLayout не допускает отрицательных полей

Я размещаю много элементов относительно руководства по компоновке и хотел бы позиционировать новый элемент почти относительно этого руководства по макету.

Я пробовал с отрицательной рамкой макета без успеха.

Ответ 1

Вот сообщение в блоге, в котором обсуждаются отрицательные поля в ConstraintLayout.

Использование пробелов для отрицательных полей

Вид в ConstraintLayout не может иметь отрицательные поля (его не поддерживается). Тем не менее, с помощью простого трюка вы можете иметь аналогичную функциональность, вставив Пространство (которое по существу представляет собой пустой вид) и установив его размер в желаемое поле.

Ответ 2

android:translationX="-10dp"
android:translationY="-10dp"

Ответ 3

Это плохая практика использовать НЕГАТИВНЫЙ МАРГИН.

ConstraintLayout - это ViewGroup, которая позволяет гибко размещать и изменять размеры виджетов.

Обратите внимание, что маржа может быть только положительной или равна нулю.ConstraintLayout не может иметь отрицательные поля.

Ты можешь использовать

  • андроид: layout_marginStart
  • андроид: layout_marginEnd
  • андроид: layout_marginLeft
  • андроид: layout_marginTop
  • андроид: layout_marginRight
  • андроид: layout_marginBottom

Ответ 4

Вы можете использовать View для хранения фиксированного значения, например 30dp, как показано ниже:

 <com.mapbox.mapboxsdk.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="45dp"
    app:layout_constraintBottom_toBottomOf="@id/space"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:mapbox_uiRotateGestures="false" />

<View
    android:id="@+id/space"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    app:layout_constraintTop_toBottomOf="parent" />

Ответ 5

Создание представления для положения ваших братьев и сестер может быть не лучшим вызовом, потому что представление будет нарисовано (даже если оно невидимо), оно все равно будет использовать ресурсы.

Вместо этого вы можете попробовать использовать рекомендации:

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

https://developer.android.com/training/constraint-layout#constrain-to-a-guideline