我想要一个列表视图,其中的项目由左侧的图像缩略图和右侧的一些文本组成。列表视图声明如下:
<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
的事实:
我在这里做错了什么?如何使列表项高度保持指定状态?
我在调用setImageBitmap
之前尝试读取ImageView的高度和宽度,之后重置它们,这没有帮助,我也尝试设置android:adjustViewBounds="false"
和android:scaleType="fitCenter"
没有'改变任何东西。到目前为止唯一有效的方法是在android:layout_height="?android:attr/listPreferredItemHeight"
上设置ImageView
,但我不想如此努力地设置图像视图高度。至少没有,直到我理解为什么我看到我现在看到的东西。
答案 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"
答案 2 :(得分:-1)
在项目布局中,将ImageView layout_width和layout_height更改为固定大小: 例如:
09.14
根据需要更改“150dp”。