#android #android-layout #android-recyclerview #android-linearlayout #android-imageview
#Android #android-layout #android-recyclerview #android-linearlayout #android-просмотр изображений
Вопрос:
Я пытаюсь создать элемент просмотра recycler, чтобы отображать несколько строк из нескольких изображений бок о бок:
- [изображение 1] [изображение 2] [изображение 3]
- [изображение 4] [изображение 5] [изображение 6]
- [изображение 7] [изображение 8] [изображение 9]
Я хочу избежать установки какой-либо ширины или высоты, поскольку я хочу, чтобы изображения масштабировались, чтобы заполнить доступную ширину экрана. Я пытаюсь сделать это с помощью чисто XML-макета Android (ie. предпочел бы не делать это программно, если это возможно) и хочу избежать установки фиксированной высоты. Однако я не могу найти какие-либо применимые настройки высоты для достижения этого.
Темы переполнения стека, которые я всегда нахожу, склонны предлагать layout_weight
, что «почти работает», поскольку изображения действительно заполняют доступную ширину, однако высота оболочки слишком велика, и это все еще высота исходных изображений.
Смотрите на изображении ниже, синяя линия показывает высоту контейнера, что создает впечатление большого количества непреднамеренных полей / отступов.
Возможно ли изменить следующее, чтобы также обрезать высоту оболочки, чтобы более точно соответствовать изображениям?
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@ id/card_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/card_ha" />
<ImageView
android:id="@ id/card_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/card_ha" />
<ImageView
android:id="@ id/card_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/card_ha" />
</LinearLayout>
</layout>
Комментарии:
1. Может быть android:scaleType=»centerCrop» для ImageView?
2. К сожалению, нет. Хороший стиль предложения-7, но перепробовал все
scaleType
значения и ничего хорошего.3. Я сделал это, но программно только с помощью метода переопределения onWindowsFocusChanged
Ответ №1:
Вы пробовали adjustViewBounds
?
Смотрите, согласно официальной документации, а также моему опыту использования, adJustViewBounds
выполняет работу из xml для настройки ImageView's
границ в соответствии с соотношением изображение / рисуемое, как также указано на изображении, прикрепленном ниже.
Итак, если вы установите width
значение 0dp
и height
на wrap_content
, что вы уже сделали, размер ImageView будет скорректирован в соответствии с соотношением сторон.
Чтобы сделать это: Добавьте android:adjustViewBounds="true"
во все ImageViews
теги. Вам не нужно делать что-либо еще программно или в xml.
Кроме того, я бы посоветовал использовать GridView
, если вы думаете добавить больше строк изображений, в противном случае нет необходимости.
Комментарии:
1. Ты легенда. Я был уверен, что должен быть «однострочный» способ сделать это! Я также проверю GridView, спасибо!
2. @JosephMcDermott Я рад, что это помогло. Пожалуйста. И вам нужно,
GridView
поскольку для структуры типа 2d-массива, как вы показали в начале своего вопроса,GridView
это ключ, передайте ему единыйImageView
макет и максимальное количество просмотров в одной строке (оптимально 3-4), и он заполнит 2d-структуру. Кроме того, вы можете дополнительно создавать галерею / фотографии, подобные структуре, увеличивая / уменьшая вид с помощью жеста масштабирования.