Надутый ImageView для установки в GalleryView - это неправильный размер
Я пытаюсь раздуть ImageView, который масштабирует Drawable, который я могу отобразить в GalleryView. Мой код для раздувания представления, похоже, работает нормально, за исключением того, что атрибуты ImageView не применяются. В частности, надутый ImageView не имеет ширины/высоты, которые я установил для него с помощью параметров android: layout в XML.
Может кто-нибудь показать мне, что я делаю неправильно?
Я хочу установить ширину/высоту изображения в формате 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;
}
Ответы
Ответ 1
Трюк заключается в просто использовании следующей версии inflate()
:
inflater.inflate(R.layout.gallery_item, parent, false);
Последние два параметра являются обязательными. Если вы передаете "null" в качестве родителя, надуватель не знает, какие типы параметров макета создавать и, следовательно, игнорирует все атрибуты android:layout_
XML. Последний параметр просто подсказывает, что надувник не сразу добавляет раздутый вид родителям. Если вы передадите правду (по крайней мере, внутри метода Adapter getView()
), будут происходить плохие вещи.
Ответ 2
Я не уверен, но это может сработать. Дайте идентификатор вашему изображению в вашем xml (скажем, это "@+ id/image":
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