Расположить imageView между двумя представлениями и динамически изменить его размер, чтобы он соответствовал?

У меня есть простой макет с двумя кнопками и изображением, содержащимся в ConstraintLayout. Представление изображения показывает векторную графику и находится между двумя кнопками по горизонтали.

____________
| Button    |
------------
____________
| ImageView |
------------
____________
| Button    |
------------

Проблема в том, что я не могу понять, как правильно ограничить изображение по вертикали между двумя кнопками.

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

Нет ли способа динамически изменять размер ImageView на основе ограничений?

<ImageView
    android:id = "@+id/imageView"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:src = "@drawable/image"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@id/buttonTop"
    app:layout_constraintBottom_toTopOf = "@id/buttonBottom"/>

Это работает на устройствах с высоким соотношением сторон, но на маленьких нижняя и/или верхняя кнопки перекрывают изображение.

2
0
257
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Установить изображение

android:layout_height = "0dp"
app:layout_constraintTop_toBottomOf = "@id/buttonTop"
app:layout_constraintBottom_toTopOf = "@id/buttonBottom"

высота будет регулироваться в зависимости от размера устройства

Вы должны установить размер макета ImageView на match_constraint. Просто установите layout_width и layout_height на 0dp. Таким образом, размер макета будет настолько большим, насколько позволяют установленные ограничения.

<ImageView
    android:id = "@+id/imageView"
    android:layout_width = "0dp"
    android:layout_height = "0dp"
    android:src = "@drawable/image"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@id/buttonTop"
    app:layout_constraintBottom_toTopOf = "@id/buttonBottom"/>

я думаю, что ширина вашего макета должна быть 0dp (соответствовать ограничениям).

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