【发布时间】:2015-01-23 09:27:13
【问题描述】:
我有一个如下所示的列表视图:
但它是在 xml 中给出硬编码的高度和宽度之后。 这是我的列表视图适配器的 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 的高度。 有人可以帮忙吗?我已经尝试了互联网上的所有解决方案,但都是徒劳的。 谢谢。
【问题讨论】:
标签: android layout android-listview height width