2014-11-22 54 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