Android - макет ограничения не учитывает поля?

Я новичок в 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 и, следовательно, переходить на следующую строку. но, как видите, маржа не применяется.

Android - макет ограничения не учитывает поля?

в целях обучения (в том числе и для меня) я хотел бы сослаться на документация Android для макета ограничений, не могли бы вы загрузить моментальный снимок того, как выглядит ваш макет прямо сейчас?

EvOlaNdLuPiZ 25.07.2018 19:21

Добавлен предварительный просмотр @EvOlaNdLuPiZ.

Phil 25.07.2018 19:37

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

EvOlaNdLuPiZ 25.07.2018 19:44
4
3
2 077
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Прежде всего, почему бы вам просто не использовать представление изображений для своего контейнера? и проверьте это, просто отредактируйте ширину текстового представления, которая не принимает маржу до 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 изображения внутри контейнера изображений.

Phil 25.07.2018 20:15

хорошо, мое плохое, тогда просто измените ImageView на ConstraintLayout и обязательно оберните текст в соответствии с ограничением, которое установит его ширину на ноль, и это

Ezaldeen sahb 25.07.2018 20:19
Ответ принят как подходящий

Как было предложено, разместите текстовые представления внутри относительного макета. Это позволит вашему макету ограничений выровняться рядом с тем, что он знает, в отличие от выравнивания рядом с текстовым представлением, которое может изменить размер и, таким образом, вызвать перекрытие. С этим вы получите предсказуемое поведение.

<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. )

Michał Baran 15.08.2018 15:16

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

EvOlaNdLuPiZ 19.08.2018 03:54

Вы должны использовать RelativeLayout или ConstraintLayout. Нет необходимости использовать оба

Felipe Andrade 17.04.2020 21:59

Пожалуйста, используйте ниже код 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 (ограничение соответствия), в противном случае он не будет учитывать маржу по сравнению с родительским макетом ограничения

hmac 04.10.2018 22:45

Я просто установил ширину на 0dp, как показано ниже, и это сработало. android: layout_width = "0dp" Спасибо! Ваш ответ весьма полезен.

Subhan Ali 11.10.2019 12:51

Другие вопросы по теме