我有一个列表视图,如下所示:
但它是在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的高度。 有人可以帮忙吗?我已尝试过互联网上的所有解决方案,但都是徒劳的。 感谢。
答案 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);
}
}