设置`layout_weight`时如何设置`ImageView`的高度以匹配它的宽度?

时间:2013-08-10 09:07:41

标签: android gridview imageview height width

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

2 个答案:

答案 0 :(得分: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的宽度,并将其高度设置为等于它。

答案 1 :(得分:0)

要将ImageView设置为等于屏幕的一半,您需要将以下内容添加到ImageView的XML中:

<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;

希望这有帮助!