这是交易:我有一个GridView
with android:numColumns="2"
。GridView
中的项目ImageViews
带有android:layout_weight="1"
,因此它们是屏幕宽度的一半。问题是height
属性,它应该等于宽度。我试着玩scaleype
,到目前为止没有成功。如何设置GridView
元素的宽度以填充屏幕的一半并将它们的高度设置为等于它们的宽度?
问问题
4094 次
2 回答
2
您必须以编程方式获取 ImageViews 宽度,然后设置高度。
但如果你只是使用img.getWidth()
; 例如。在 中OnCreate()
,它会返回0
,因为它还没有被绘制。
所以你必须做这样的事情OnCreate()
:
ImageView img = (ImageView) findViewById(R.id.img);
ViewTreeObserver vto = img.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
int x;
img.getViewTreeObserver().removeOnPreDrawListener(this);
x = img.getMeasuredWidth();
img.setLayoutParams(new LinearLayout.LayoutParams(x,x));
return true;
}
});
这将在绘制后获得 Imageview 的宽度并将其高度设置为等于它。
于 2014-10-06T17:42:27.290 回答
0
要将ImageView
相等设置为屏幕的一半,您需要将以下内容添加到您的 XML 中ImageView
:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"/>
然后将高度设置为等于此宽度,您需要在代码中执行此操作。在适配器的getView
方法中,将高度设置为等于其测量的宽度:GridView
ImageView
int measuredImageWidth = mImageView.getMeasuredWidth();
mImageView.getLayoutParams().height = measuredImageWidth;
希望这可以帮助!
于 2013-09-20T22:40:00.697 回答