Можно ли располагать значок по центру в макете ограничения, если только текстовое представление не пересекается - PullRequest
2 голосов
/ 31 мая 2019

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

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

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

Это текущий статус макета со всеми элементами.:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="200dp">

    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@drawable/ic_play"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@id/barrier"
        app:layout_constraintBottom_toBottomOf="@id/barrier"
        />

    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="top"
        app:constraint_referenced_ids="guide,text" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guide"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Possimus nulla molestias maxime. Distinctio perferendis veniam modi sint numquam dolores esse. Minus consequuntur mollitia asperiores praesentium non minus. Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Et dolor sit voluptatem fugit."
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

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

Чтобы помочь понять проблему, вот несколько изображений от дизайнера пользовательского интерфейса в Android Studio:

Обнадеживающий результат с коротким текстом: Icon centered, short text not overlapped

Что вызывает проблемы, когда текст длинный: Icon shifted upwards, long text overlapped

Если значок не центрируется, когда текст короткий: Icon not centered, short text not overlapped

Мы не получаем проблему, когда текст длинный: Icon shifted upwards, long text not overlapped

1 Ответ

0 голосов
/ 31 мая 2019

Установите paddingTop из TextView на половину ImageView

<TextView
    android:id="@+id/text"
    android:paddingTop="20dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Possimus nulla molestias maxime. Distinctio perferendis veniam modi sint numquam dolores esse. Minus consequuntur mollitia asperiores praesentium non minus. Temporibus ea quasi ut dolores quae qui. Et dolor sit voluptatem fugit. Et dolor sit voluptatem fugit."
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"/>
...