Задутый ImageView, чтобы поставить в GalleryView не правильный размер

StackOverflow https://stackoverflow.com/questions/2869749

  •  03-10-2019
  •  | 
  •  

Вопрос

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

Может кто-нибудь показать мне, что я делаю не так?

Я хочу установить ширину / высоту изображения в DP, так что это правильный размер на нескольких экранах DPI и поддерживает 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;
    }
Это было полезно?

Решение

Хитрость просто использовать следующую версию inflate():

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

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

Другие советы

Я не уверен, но это может работать. Дайте удостоверение личности на свой ImageView в своем 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/turboboiandroidfast.html.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top