Я новичок в ConstraintLayout, и у меня проблемы с полями. У меня есть следующий файл layout, но я пытаюсь заставить layoutNewsEventsItemImageContainer иметь поле 20dp слева, сохраняя при этом TextView слева от этого поля.
Что я делаю неправильно???
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/layoutNewsEventsItemContainer"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:clickable = "true"
android:focusable = "true"
android:padding = "20dp">
<TextView
android:id = "@+id/lblNewsEventsItemHeadline"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "TextView"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent"/>
<TextView
android:id = "@+id/lblNewsEventsItemCopy"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginTop = "10dp"
android:text = "TextView"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemHeadline"/>
<TextView
android:id = "@+id/lblNewsEventsItemDateModified"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "TextView"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemCopy"/>
<android.support.constraint.ConstraintLayout
android:id = "@+id/layoutNewsEventsItemImageContainer"
android:layout_width = "75dp"
android:layout_height = "75dp"
android:background = "@color/BackgroundColor2"
android:layout_marginStart = "20dp"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintTop_toTopOf = "parent">
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
Как вы можете видеть на превью ниже, он отключил мою копию TextView. TextView должен оставаться слева от layoutNewsEventsItemImageContainer и, следовательно, переходить на следующую строку. но, как видите, маржа не применяется.
Добавлен предварительный просмотр @EvOlaNdLuPiZ.
из того, что я вижу, у вас есть три текстовых представления одно за другим, выстроенных по вертикали, поэтому я считаю, что макет ограничения не знает, к какому из них выстроиться рядом. вопрос, который я задаю: с какой из них стоит макет ограничения? опять же, это на первый взгляд, но лучшее решение имо использует относительную компоновку для размещения текстовых представлений. затем разместите макет ограничения рядом с относительным макетом.
Прежде всего, почему бы вам просто не использовать представление изображений для своего контейнера? и проверьте это, просто отредактируйте ширину текстового представления, которая не принимает маржу до 0dp
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/layoutNewsEventsItemContainer"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:clickable = "true"
android:focusable = "true"
android:padding = "20dp">
<TextView
android:id = "@+id/lblNewsEventsItemHeadline"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "TextView"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent"/>
<TextView
android:id = "@+id/lblNewsEventsItemCopy"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_marginTop = "10dp"
android:text = "88888888888888888888888888888888888888888888888888888888888888888888888888"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemHeadline" />
<TextView
android:id = "@+id/lblNewsEventsItemDateModified"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginStart = "16dp"
android:text = "TextView"
app:layout_constraintRight_toLeftOf = "@+id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemCopy" />
<ImageView
android:id = "@+id/layoutNewsEventsItemImageContainer"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:layout_marginEnd = "16dp"
android:layout_marginStart = "20dp"
android:background = "@color/colorPrimary"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toEndOf = "@+id/lblNewsEventsItemCopy"
app:layout_constraintTop_toTopOf = "parent"
android:layout_marginRight = "16dp"
android:layout_marginLeft = "20dp">
</ImageView>
потому что у меня есть 3 изображения внутри контейнера изображений.
хорошо, мое плохое, тогда просто измените ImageView на ConstraintLayout и обязательно оберните текст в соответствии с ограничением, которое установит его ширину на ноль, и это
Как было предложено, разместите текстовые представления внутри относительного макета. Это позволит вашему макету ограничений выровняться рядом с тем, что он знает, в отличие от выравнивания рядом с текстовым представлением, которое может изменить размер и, таким образом, вызвать перекрытие. С этим вы получите предсказуемое поведение.
<ConstraintLayout
android:id = "@+id/layoutNewsEventsItemContainer"
...
<RelativeLayout
android:id = "@+id/container_for_textview"
android:width = "wrap_content"
android:height = "wrap_content">
<TextView> ...first
<TextView> ...second
<TextView> ...third
</RelativeLayout>
<ConstraintLayout
android:id = "@+id/layoutNewsEventsItemImageContainer"
....
app:layout_constraintEnd_toEndOf = "@+id/container_for_textview"
</ConstraintLayout>
</ConstraintLayout>//NewsEventsItemContainer
Вы можете подумать, какой макет использовать, но размещение RelativeLayout в ConstraintLayout всегда является плохим решением из-за производительности и потому, что он вам просто никогда не нужен (вы можете добиться всего с помощью ConstraintLayout того, чего вы хотели, поместив в него RelativeLayout. )
пожалуйста, не публикуйте без кода. Я хотел бы увидеть ваше решение и запустить его со своей стороны, чтобы я мог проверить и подтвердить ваше требование. Спасибо.
Вы должны использовать RelativeLayout или ConstraintLayout. Нет необходимости использовать оба
Пожалуйста, используйте ниже код xml для достижения правильного результата
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/layoutNewsEventsItemContainer"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:clickable = "true"
android:focusable = "true"
android:padding = "20dp">
<TextView
android:id = "@+id/lblNewsEventsItemHeadline"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_marginRight = "20dp"
android:text = "TextViewnsd,n,snfklsdnfknkfnm,nfm,nf,mn,mfnm,sdnfm,dnf,mnsd,mfn,sdmfn,dmsnf,sdnf,nsd,fn,sdf,nms,fn,fsd"
app:layout_constraintEnd_toStartOf = "@id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent"
/>
<TextView
android:id = "@+id/lblNewsEventsItemCopy"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_marginRight = "20dp"
android:layout_marginTop = "10dp"
android:text = "88888888888888888888888888888888888888888888888888888888888888888888888888"
app:layout_constraintEnd_toStartOf = "@id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemHeadline" />
<TextView
android:id = "@+id/lblNewsEventsItemDateModified"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_marginRight = "20dp"
android:text = "yess"
app:layout_constraintEnd_toStartOf = "@id/layoutNewsEventsItemImageContainer"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toBottomOf = "@+id/lblNewsEventsItemCopy" />
<android.support.constraint.ConstraintLayout
android:id = "@+id/layoutNewsEventsItemImageContainer"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:background = "@color/colorPrimary"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintTop_toTopOf = "parent">
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
Это поможет вам достичь результата ниже, используя constraint layout.
Надеюсь, это поможет
ключевая часть переключает ширину wrap_content на 0dp (ограничение соответствия), в противном случае он не будет учитывать маржу по сравнению с родительским макетом ограничения
Я просто установил ширину на 0dp, как показано ниже, и это сработало. android: layout_width = "0dp" Спасибо! Ваш ответ весьма полезен.
в целях обучения (в том числе и для меня) я хотел бы сослаться на документация Android для макета ограничений, не могли бы вы загрузить моментальный снимок того, как выглядит ваш макет прямо сейчас?