2010-05-19 8 views
11

Я пытаюсь раздуть ImageView, который масштабирует Drawable, который я могу отобразить в GalleryView. Мой код для раздувания представления, похоже, работает нормально, за исключением того, что атрибуты ImageView не применяются. В частности, надутый ImageView не имеет ширины/высоты, которые я установил для него с помощью параметров android: layout в XML.Надутый 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 (новая галерея.LayoutParams ((int) (den * 150), (int) (den * 116))); – Richard

ответ

24

хитрость заключается в том, чтобы просто использовать следующую версию inflate():.

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

последние два параметра являются обязательными Если вы передаете «нулевой», как родитель, то инфлятор не знает, какой тип параметров макета создавать и, следовательно, игнорировать все атрибуты XML android:layout_. Последний параметр просто подсказывает, что надувник не сразу добавляет раздутый вид родителям. Если вы передадите правду (по крайней мере, внутри метода Adapter getView()), будут происходить плохие вещи.

1

Я не уверен, но это может сработать. Дайте идентификатор к вашему ImageView в вашем XML (говорят, что это «@ + идентификатор/изображение»:

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

Я попытался добавить идентификатор к моему ImageView безрезультатно :-( – Richard

+1

Отличный совет по переработке вида BTW. – Richard

+0

Я сделал что-то похожее, но вместо этого использовал gridview с настраиваемым макетом для каждого элемента: изображение и текст ниже. ширина и высота в файле xml работали для меня. Кстати, вы уверены, что нет никакой разницы? попробуйте поместить что-то вроде 20dip для обоих и проверьте, видите ли вы какие-либо изменения, и попробуйте какое-то высокое значение, например 300dip. –

 Смежные вопросы

  • Нет связанных вопросов^_^