设置项目图像时列出项目高度更改

时间:2017-11-26 22:16:28

标签: android listview kotlin

我想要一个列表视图,其中的项目由左侧的图像缩略图和右侧的一些文本组成。列表视图声明如下:

<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时,列表项的高度将等于图像的原始高度(因此,如果我将100x1600图像添加到列表中,则项目高度变为1600像素) LinearLayout的高度固定且ImageView的高度设置为match_parent的事实: looong list items

我在这里做错了什么?如何使列表项高度保持指定状态?

我在调用setImageBitmap之前尝试读取ImageView的高度和宽度,之后重置它们,这没有帮助,我也尝试设置android:adjustViewBounds="false"android:scaleType="fitCenter"没有'改变任何东西。到目前为止唯一有效的方法是在android:layout_height="?android:attr/listPreferredItemHeight"上设置ImageView,但我不想如此努力地设置图像视图高度。至少没有,直到我理解为什么我看到我现在看到的东西。

3 个答案:

答案 0 :(得分:0)

因为ListView的高度是match_parent。将ListView的高度更改为wrap_content。

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

答案 1 :(得分:0)

请尝试设置android:adjustViewBounds="true"

例如,请查看以下屏幕截图

使用android:adjustViewBounds="false"

使用android:adjustViewBounds="true"

enter image description here

答案 2 :(得分:-1)

在项目布局中,将ImageView layout_width和layout_height更改为固定大小: 例如:

09.14

根据需要更改“150dp”。