2010-05-19 59 views
11

我想膨脹一個ImageView,縮放一個Drawable,我可以在GalleryView中顯示。我的代碼膨脹視圖似乎工作正常,除了ImageView的屬性沒有應用。具體來說,膨脹的ImageView沒有通過XML中的android:layout params爲其設置的寬度/高度。膨脹ImageView放在GalleryView是不正確的大小

有人可以告訴我我做錯了什麼嗎?

我想在dp中設置圖像的寬度/高度,以便跨多個屏幕dpis支持Android 1.5+以上的正確尺寸。因此,我不能使用類似:

i.setLayoutParams(new Gallery.LayoutParams(150, 116) 

我的佈局定義是:

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="150dp" android:layout_height="116dp" 
    android:background="@drawable/gallery_item_background" 
    android:scaleType="fitXY" /> 
</ImageView> 

,我使用吹大的ImageView的片段是:

public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = getLayoutInflater(); 
     ImageView i = (ImageView) inflater.inflate(R.layout.gallery_item, null); 
     i.setImageResource(mImageIds.get(position)); 
     i.setScaleType(ImageView.ScaleType.FIT_XY); 

     return i; 
    } 
+0

目前我使用DisplayMetrics.density攻擊了一個解決方案。 float den = mDisplayMetrics.density; convertView.setLayoutParams(new Gallery.LayoutParams((int)(den * 150),(int)(den * 116))); – Richard 2010-05-20 21:13:11

回答

24

訣竅就是使用的inflate()以下版本:

inflater.inflate(R.layout.gallery_item, parent, false); 

最後兩個參數是強制性的,如果你通過「零」作爲父母,充氣不知道什麼類型的佈局參數創造並因此而忽略所有android:layout_ XML屬性。最後一個參數只是告訴充氣者不要將充氣的視圖添加到父母身上。如果傳遞正確(至少在適配器的getView()方法中),就會發生不好的事情。

1

我不知道,但這可能工作。舉一個ID到您的ImageView在你的XML(說它是「@ + ID /圖像」:

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = getLayoutInflater(); 
    View view = (View) inflater.inflate(R.layout.gallery_item, null); 
    ImageView i = (ImageView) view.findViewById(R.id.image); 
    i.setImageResource(mImageIds.get(position)); 
    i.setScaleType(ImageView.ScaleType.FIT_XY); 

    return view; 
} 

您應該以優化其檢查方式,如果convertView是爲了回收意見空選中此:http://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

+0

我試圖添加一個id到我的ImageView無濟於事:-( – Richard 2010-05-20 21:04:24

+1

偉大的提示回收視圖順便說一句 – Richard 2010-05-20 21:06:36

+0

我做了類似的東西,而是使用一個gridview每個元素的自定義佈局:一個imageview和下面的文本。寬度和xml文件中的高度對我有用 順便說一句,你確定沒有什麼區別嗎?試着爲它們加上類似20dip的東西,並檢查你是否看到任何改變,並嘗試一些像300dip這樣的高值。 – 2010-05-20 21:54:13