Расширенный ImageView, чтобы вставить GalleryView не является правильным размером

Я пытаюсь расширить ImageView, который масштабирует Drawable, который я могу отобразить в GalleryView. Мой код для расширения представления, кажется, хорошо работает, за исключением того, что атрибуты ImageView не применяются. А именно, расширенный ImageView не имеет ширины/высоты, которую я установил для него через android:layout параметрические усилители в XML.

Кто-то может показать мне, что я делаю неправильно?

Я хочу установить ширину/высоту изображения в разности потенциалов, так, чтобы это был корректный размер через несколько экранных точек на дюйм и поддержки 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;
    }
11
задан Richard 19 May 2010 в 21:57
поделиться

2 ответа

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

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

Последние два параметра являются обязательными. Если вы передадите "null" в качестве родительского элемента, надуватель не знает, какой тип параметров макета нужно создать, и поэтому игнорирует все XML-атрибуты android: layout_ . Последний параметр просто указывает надувному устройству не добавлять расширенное представление к родительскому элементу сразу. Если вы передадите значение true (по крайней мере, в методе адаптера getView () ), произойдут неприятности.

26
ответ дан 3 December 2019 в 03:34
поделиться

Я не уверен, но это может сработать. Дайте идентификатор вашему просмотру изображения в вашем 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 значение null, чтобы повторно использовать представления. Проверьте это: http: //code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

1
ответ дан 3 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: