以Listview中的百分比设置相同的ImageView高度和宽度

时间:2014-11-25 11:36:35

标签: android layout android-listview height width

我有一个列表视图,如下所示:

enter image description here

但它是在xml中给出硬编码的高度和宽度之后。 这是我的listview适配器的XML:           

<LinearLayout 
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="3"    
    android:orientation="horizontal">

<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="14dp"
    android:layout_marginTop="4dp"
    android:layout_marginRight="3dp"
    android:layout_marginBottom="4dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/descr_image"
    android:scaleType="centerCrop" />

</LinearLayout>

 <LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="7"
    android:weightSum="7"
 android:orientation="horizontal" 
 > 

<TextView
    android:id="@+id/text"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="5"
    android:layout_gravity="left|center"
    android:gravity="center|left"
    android:layout_marginLeft="20dip"
    android:textSize="18sp" 

   />


<ImageView 
    android:id="@+id/arrow"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:layout_gravity="right|center"
    android:src="@drawable/bluearrowmap"
    android:layout_marginRight="10dp"

    />

</LinearLayout>  

我给第一张图片2%的宽度,但问题是,现在我怎样才能给那个图像视图提供高度,就像从差异设备获取宽度一样。因为我希望这个图像像一个正方形就像它在图片中一样。 我在我的适配器类

中尝试了这段代码
        ViewTreeObserver vto = holder.image.getViewTreeObserver();
            vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                public boolean onPreDraw() {
                    holder.image.getViewTreeObserver().removeOnPreDrawListener(this);
                    int finalHeight = holder.image.getMeasuredHeight();
                    int finalWidth = holder.image.getMeasuredWidth();

                    holder.image.getLayoutParams().height=finalWidth;

                    return true;
                }
            }); 

我在我的适配器类的getview中编写此代码。有时候工作正常但有时它需要向下滚动以根据宽度设置imagview的高度。 有人可以帮忙吗?我已尝试过互联网上的所有解决方案,但都是徒劳的。 感谢。

2 个答案:

答案 0 :(得分:1)

尝试在LinearLayout中正确使用权重,然后无需在运行时更改任何高度或宽度值:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/ic_launcher"
        android:contentDescription="@string/descr_image"/>


    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"/>
    </LinearLayout>

    <ImageView
        android:id="@+id/arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/ic_launcher"/>

</LinearLayout>

答案 1 :(得分:1)

扩展图像视图并将其设置如下:

public class SquareImageView  extends ImageView {

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int width = getMeasuredWidth();
    setMeasuredDimension(width, width);
  }

}