Изменение высоты списка элементов при установке элемента изображения

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

<ListView android:id="@+id/imageList" android:layout_width="match_parent" android:layout_height="match_parent" /> 

Элемент выглядит следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:orientation="horizontal"> <ImageView android:id="@+id/imageView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:adjustViewBounds="false" android:scaleType="fitCenter" app:srcCompat="@mipmap/ic_cross" /> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="5" android:gravity="center_vertical|start" android:text="TextView" /> </LinearLayout> 

Теперь, в какой-то момент в моем коде, я назначаю адаптер ListView :

 val lv = findViewById<ListView>(R.id.imageList) lv.adapter = ImageListBinder(this, cachedImages!!) 

И ImageListBinder.getView выглядит так:

 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { val view = convertView ?: createView() val holder = view.tag as ViewHolder holder.textView.text = "Some text" val bmp = BitmapFactory.decodeFile(images[position].localPath.absolutePath) holder.imageView.setImageBitmap(bmp) return view } private fun createView() : View { val view = inflater.inflate(R.layout.list_row, null) view.tag = ViewHolder(view.findViewById(R.id.imageView), view.findViewById(R.id.textView)) return view } private class ViewHolder(val imageView: ImageView, val textView: TextView) 

Проблема заключается в том, что когда эти изображения назначаются ImageViews, высота элемента списка становится равной исходной высоте изображения (поэтому, если я добавлю изображение 100×1600 в список, высота элемента станет 1600 пикселей), несмотря на то, что LinearLayout фиксирована, а высота ImageView равна match_parent : список элементов списка

Что я здесь делаю неправильно? Как сделать высоту элемента списка таким, как указано?

Я попытался прочесть высоту и ширину ImageView перед вызовом setImageBitmap , после чего их сброс после этого не помог, я также попытался установить android:adjustViewBounds="false" и android:scaleType="fitCenter" который ничего не менял или. Единственное, что работало до сих пор, – это установить android:layout_height="?android:attr/listPreferredItemHeight" в ImageView , но я не хочу так сильно настраивать высоту изображения. По крайней мере, пока я не пойму, почему я вижу то, что вижу сейчас.

Это связано с тем, что высота вашего ListView соответствует match_parent. Измените высоту ListView на wrap_content.

 <ListView android:id="@+id/imageList" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Попробуйте установить android:adjustViewBounds="true"

Например, пожалуйста, посмотрите на следующие скриншоты

С android:adjustViewBounds="false"

С android:adjustViewBounds="true"

введите описание изображения здесь

В элементе Layout измените ImageView_View и layout_height на фиксированный размер как: например:

 <ImageView android:id="@+id/imageView" android:layout_width="150dp" android:layout_height="150dp" android:adjustViewBounds="false" android:scaleType="fitCenter" app:srcCompat="@mipmap/ic_cross" /> 

измените «150dp», как вам нравится.