Я пытаюсь держать значок по центру внутри макета ограничения, в то же время заставляя его всегда оставаться поверх некоторого текстового представления, которое находится в нижней части макета ограничения (это очень упрощенная версия моей фактической проблемы, но она представляет проблему в равной степени),Текст внизу может быть достаточно большим, чтобы проходить по центру макета, и в этом случае я хочу, чтобы значок был смещен вверх.
Чтобы связать нижнюю часть значка как с центром, так и с текстом.В верхней части представления я использую направляющую в центре макета и барьер, чтобы поймать верхнюю часть текстового представления или верхнюю часть направляющей, в зависимости от того, что выше.
Проблема в том, что половина значкапод руководством, поэтому текст по-прежнему перекрывается значком.И значок перемещается вверх только тогда, когда верхняя часть текстового представления пересекает направляющую.Кроме того, я могу установить нижнюю часть значка в верхней части направляющей, чтобы текстовое представление никогда не перекрывалось, но значок не был точно отцентрирован.
Это текущий статус макета со всеми элементами.:
<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](https://i.imgur.com/klGcWw5.png)
Что вызывает проблемы, когда текст длинный: ![Icon shifted upwards, long text overlapped](https://i.imgur.com/rMDSy3G.png)
Если значок не центрируется, когда текст короткий: ![Icon not centered, short text not overlapped](https://i.imgur.com/Sy4dxBk.png)
Мы не получаем проблему, когда текст длинный: ![Icon shifted upwards, long text not overlapped](https://i.imgur.com/xCq8W82.png)