2010-05-19 8 views
11

Ben bir GaleriView görüntüleyebilirsiniz bir Drawable ölçekler bir ImageView şişirmeye çalışıyorum. Görünümü şişirmek için kodumu, ImageView öznitelikleri uygulanmadığı dışında, iyi çalışıyor gibi görünüyor. Spesifik olarak, şişirilmiş ImageView, android üzerinden düzenlediğim genişlik/yüksekliğe sahip değil: XML'deki mizanpaj paramları.Şişirilmiş ImageView, ViewView içine koymak için doğru boyut değil

Birisi bana neyi yanlış yaptığımı gösterir mi?

Görüntünün genişliğini/yüksekliğini dp olarak ayarlamak istiyorum, böylece birden çok ekran dpi arasında doğru boyutta olmalı ve Android 1.5+ sürümünü destekleyin. Sonuç olarak ben gibi bir şey kullanamazsınız:

<?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> 

Ve ImageView şişirmek kullanıyorum snippet'tir:

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

Benim düzen tanımı olduğunu ben

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

Şu anda DisplayMetrics.density kullanarak bir çözümü hackledim. float den = mDisplayMetrics.density; convertView.setLayoutParams (yeni Gallery.LayoutParams ((int) (den * 150), (int) (den * 116))); – Richard

cevap

24

hile inflate() aşağıdaki sürümünü kullanmak için basitçe.

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

son iki parametre zorunludur Eğer ebeveyn olarak "boş" iletirseniz, inflater düzen parametreleri ne tür bilmez oluşturmak ve dolayısıyla yok sayar tüm android:layout_ XML öznitelikleri. Son parametre basit bir şekilde, inflatanı şişirilmiş görünümü hemen ebeveyne eklememesini söyler. Doğru (en azından bir Bağdaştırıcının getView() yönteminin içinden) geçerseniz, kötü şeyler olacaktır.

1

emin değilim ama bu işe yarayabilir. (Senin xml sizin ImageView bir kimliği verin o "@ + id/resim" dir ki:

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; 
} 

bunu kontrol optimize etmelidir arada convertView görüşlerini geri dönüşümünün sağlanması amacıyla null ise bu kontrol edin:. http://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

+0

ImageView'ime boş bir kimlik eklemeyi denedim :-( – Richard

+1

BTW'yi geri döndürme konusunda harika bir ipucu – Richard

+0

Benzer bir şey yaptım ancak öğeye göre özel bir düzen içeren bir grid görünümü kullandım: bir resim görünümü ve aşağıdaki bir metin. xml dosyasındaki genişlik ve yükseklik benim için çalışıyordu BTW Fark olmadığından emin misiniz? Her ikisine 20dip gibi bir şey koymak için deneyin ve herhangi bir değişiklik olup olmadığını kontrol edin ve 300dip gibi yüksek bir değer deneyin. –