3

这是交易:我有一个GridViewwith android:numColumns="2"GridView中的项目ImageViews带有android:layout_weight="1",因此它们是屏幕宽度的一半。问题是height属性,它应该等于宽度。我试着玩scaleype,到目前为止没有成功。如何设置GridView元素的宽度以填充屏幕的一半并将它们的高度设置为等于它们的宽度?

4

2 回答 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方法中,将高度设置为等于其测量的宽度:GridViewImageView

int measuredImageWidth = mImageView.getMeasuredWidth();
mImageView.getLayoutParams().height = measuredImageWidth;

希望这可以帮助!

于 2013-09-20T22:40:00.697 回答