Android 在getView中获取ImageView宽度

Android 在getView中获取ImageView宽度,android,listview,imageview,listadapter,getview,Android,Listview,Imageview,Listadapter,Getview,我无法在ListAdapter的getView方法中获取ImageView的宽度 <ImageView android:id="@+id/photoPost" android:layout_width="match_parent" android:layout_height="0dp" android:visibility="gone" /> 我在为targetLight干杯,它总是0,这意味着getWidth()方法

我无法在ListAdapter的getView方法中获取ImageView的宽度

<ImageView
        android:id="@+id/photoPost"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:visibility="gone" />

我在为targetLight干杯,它总是0,这意味着getWidth()方法返回0。我试过很多不同的方法。请帮忙

问题是,当您尝试
getWidth
时,您的
ImageView
没有出现在屏幕上,因此它总是返回0。因此,有两种方法可以获得宽度:

holder.photoPost = (ImageView) convertView.findViewById(R.id.photoPost);
holder.photoPost.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                holder.photoPost.getViewTreeObserver()
                        .removeOnGlobalLayoutListener(this);
            } else {
                holder.photoPost.getViewTreeObserver()
                        .removeGlobalOnLayoutListener(this);
            }

            int targetHeight = holder.photoPost.getWidth() * (9/16)
        }
});
第一条路

您需要
测量
您的
图像视图
,然后获取
测量宽度

holder.photoPost = (ImageView) convertView.findViewById(R.id.photoPost);
holder.photoPost.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);

int targetHeight = holder.photoPost.getMeasuredWidth() * (9/16);
第二种方式

onGlobalLayoutListener
添加到您的
ImageView
中,您将能够获得宽度:

holder.photoPost = (ImageView) convertView.findViewById(R.id.photoPost);
holder.photoPost.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                holder.photoPost.getViewTreeObserver()
                        .removeOnGlobalLayoutListener(this);
            } else {
                holder.photoPost.getViewTreeObserver()
                        .removeGlobalOnLayoutListener(this);
            }

            int targetHeight = holder.photoPost.getWidth() * (9/16)
        }
});

关于android文档“android:visibility:gone”,将视图设置为不占用任何布局空间。只是一个建议:试着用隐形而不是消失。我明白了,谢谢。我会试试的。如果不可见和可见都不起作用,请给出反馈。您的ImageView与父视图的宽度匹配。为什么不获取父图像的宽度,因为它与子图像视图的宽度相同。您提供的信息不多,因此很难帮助X第一种方式导致0为什么与(9/16)相乘?不知道,问题的作者需要这个比率。我认为应该是:int targetSight=(holder.photoPost.getMeasuredWidth()*9)/16;