Android调整ImageView的大小会导致视图容器的大小调整

Android调整ImageView的大小会导致视图容器的大小调整,android,android-listview,imageview,layoutparams,Android,Android Listview,Imageview,Layoutparams,在我的应用程序中,我有一个列表视图,列表的每一行都有一个ImageView。此ImageView由来自web的图像填充。下载第一幅图像时,我计算位图的高度,因为我必须根据位图的高度设置列表项的高度。我没有占位符,所以我选择这种方法来避免在填充图像时扩展每个列表项 我面临的问题是,当我尝试调整ImageView的大小时,实际上是调整了整个视图组的大小,在本例中为LinearLayout 下面是一些代码: 列表项布局 我想知道为什么您选择使用LinearLayout来创建列表,而不是使用ListVi

在我的应用程序中,我有一个列表视图,列表的每一行都有一个ImageView。此ImageView由来自web的图像填充。下载第一幅图像时,我计算位图的高度,因为我必须根据位图的高度设置列表项的高度。我没有占位符,所以我选择这种方法来避免在填充图像时扩展每个列表项

我面临的问题是,当我尝试调整ImageView的大小时,实际上是调整了整个视图组的大小,在本例中为LinearLayout

下面是一些代码:

列表项布局


我想知道为什么您选择使用LinearLayout来创建列表,而不是使用ListView(),我以前使用过它们,而且它们在创建列表时更可靠,因为您不确定列表中将包含多少项。使用ListView时,还可以自定义每行的确切大小,这样就不必为每个元素动态更改行大小

此外,从您的描述判断,您似乎希望将图像放置在Textview的侧面。如果是这样的话,我之前也偶然发现了这一点,您实际上可以不用使用ImageView来实现这一点。 有关详细信息,请参阅以下链接:

也许您应该尝试如下更改它的大小:vievHolder.photo.getLayoutParams().height=height;vievHolder.photo.requestLayout(),只是为了确保这里的方法没有问题,请尝试将imageView包装到另一个LinearLayout中。如果没有嵌套的LInearLayouts,适配器无法很好地保持父级的正确参数。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="4dp"
        android:paddingTop="8dp"
        android:layout_marginLeft="32dp"
        android:layout_marginStart="32dp"
        android:textSize="30sp" />

    <ImageView
        android:id="@+id/photo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true" />

</LinearLayout>
private void resizeImageContainer(ViewHolder viewHolder, int height) {
    LinearLayout.LayoutParams imageLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT, height);
    viewHolder.photo.setLayoutParams(imageLayoutParams);
}