当设置了`layout_weight`时,如何将`ImageView`的高度设置为与其宽度相同?

3
这里是要解决的问题: 我有一个带有android:numColumns="2"属性的GridView视图,在GridView中的项为ImageViews,并且它们具有android:layout_weight="1"属性,因此它们的宽度为屏幕宽度的一半。问题在于height属性,它应该与宽度相等。我尝试了调整scaleype,但迄今为止都没有成功。 如何设置GridView元素的宽度以填充屏幕的一半,并将它们的高度设置为与宽度相等?

你找到答案了吗? - gaurang
如果我没记错的话,我在网格视图中展示了方形图片,所以将它们的高度和宽度设置为wrap_content就足够了。否则,你可以看一下这个链接:https://dev59.com/rmw15IYBdhLWcg3whMK_ - keybee
2个回答

2

您需要通过编程获取ImageView的宽度,然后设置高度。

但是,如果您只是在OnCreate()中使用img.getWidth(),它将返回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绘制完成后获取其宽度,并将其高度设置为相同。

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"/>

要将高度设置为相同的宽度,您需要在代码中进行操作。在您的GridView适配器的getView方法中,将ImageView的高度设置为其测量宽度:

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

希望这可以帮助!

在getView方法中,即使getMeasuredWidth()返回零。 - Rahul Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接