2014-11-22 53 views
1

我不能让我的ListAdapter的getView方法的ImageView的宽度......获取ImageView的宽度

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

在我ListAdapter的getView ...

holder.photoPost = (ImageView) convertView.findViewById(R.id.photoPost); 
int targetHeight = holder.photoPost.getWidth() * (9/16); 

我烘烤targetHeight并且它始终为0,这意味着getWidth()方法返回0.我尝试了许多不同的事情。请帮忙!

+0

关于到Android文档'安卓知名度:gone'设置视图不占用任何布局空间。只是一个建议:尝试使用隐形而不是消失。 – Mike 2014-11-22 23:05:13

+0

我明白了,谢谢。我会试试看。 – wildebeest 2014-11-22 23:05:49

+0

如果有效,请给予反馈 – Mike 2014-11-22 23:07:24

回答

1

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

第一种方式

您需要measureImageView然后拿到measuredWidth

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

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

方式二

添加onGlobalLayoutListenerImageView然后,你将能够得到宽度:

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) 
     } 
}); 
+0

谢谢!我今天会试试:) – wildebeest 2014-11-23 18:34:23

+0

第一种方法导致0 – wildebeest 2014-11-23 19:10:01

+0

为什么要乘以(9/16)? – 2015-02-09 09:51:27