2013-08-05 1 views
1

Я хочу показать несколько миниатюр изображений (изображения квадратные) в GridView с этими ограничениями, что каждая строка показывает ровно два изображения и изображения, соответствующие ширине экрана (кроме заполнения и полей), но имеют максимальную ширину и высоту (например, 1 дюйм)
Я читал вопросы, но не могу решить проблему. Не могли бы вы мне помочь.Постоянное количество столбцов в GridView, прилегающих к экрану

GridView XML:

<GridView 
    android:id="@+id/gridview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:horizontalSpacing="10dp" 
    android:numColumns="2" 
    android:scrollbarStyle="outsideOverlay" 
    android:scrollbars="vertical" 
    android:stretchMode="columnWidth" 
    android:verticalScrollbarPosition="right" 
    android:verticalSpacing="10dp" 
    android:padding="10dp" /> 

GridView элементы XML:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/thumbnail" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:scaleType="fitXY" 
    android:maxWidth="72pt" 
    android:maxHeight="72pt" 
    /> 

Я добавил две фотографии, чтобы показать, что именно я хочу

Grid view in a 4 inches mobile

Grid view in a 7 inches tablet

Первое изображение (4-дюймовый сотовый телефон) - это именно то, что я хочу, но по мере увеличения ширины экрана (планшеты или ландшафтной ориентации), как изображение 2, я хочу увеличить элементы изображения. (Обратите внимание, что существует максимальный размер ширины, поэтому результат в этом режиме не такой, как сотовый телефон, изображенный на изображении 1)

+0

@aliezra Решена ли эта проблема? –

+0

У меня такая же проблема. –

+0

@JohnR Как разработчик Android сказал, что вы должны сами рассчитать размеры и размеры. –

ответ

0

Вы пытались установить layout_width в ImageView в макете элементов GridView в match_parent?

+0

Да. Я пробовал это, но результат был неправильным. –

+0

Вы должны задать этот вопрос в комментариях ниже основного вопроса. –

+0

Нужно 50 репутации, чтобы сделать это, извините – Kostek

0

Вам необходимо расширить изображение, чтобы создать изображение, где высота всегда соответствует ширине. Затем используйте этот вид вместо изображения изображения на складе и задайте ширину и высоту макета для match_parent. И удалите maxWidth и maxHeight.

0

Это то, что я просто проверял:

Поскольку вы добавляете GridView в XML она была составлена ​​в момент, когда вы настраиваете адаптер так onMeasure называется. В этом случае вы можете получить ширину gridView (реальное значение) с помощью GridView.getWidth() и передать ее в экземпляр адаптера. Затем вы можете использовать его для установки ширины и высоты элементов (в методе getView()), конечно, вам нужно вручную вычислять поля, но paddings отлично работают, если они определены в макете объекта xml

1

вам нужно будет рассчитать необходимый горизонтальный интервал сам.

Поскольку результат в пикселях, и вы, вероятно, хотите обрабатывать реальные размеры (например, дюймы или DP), сначала вам нужно будет преобразовать свои ограничения в пиксели. например, для того, чтобы преобразовать дпс пикселей, использование:

float px = someDpValue * context.getResources().getDisplayMetrics().density; 

то, вы можете использовать this method, чтобы получить размер GridView, и тогда вы будете иметь возможность сделать расчеты и установить GridView и его адаптер соответственно.

вам, вероятно, потребуется установить горизонтальное расстояние и высоту каждого столбца.

Обратите внимание, что если изображениеViews внутри сетки будет задано с неквадратичными изображениями, они будут сохранять их соотношение сторон, поэтому вам также придется иметь дело с этим. вы можете использовать центрирование в качестве типа масштабирования или просто растянуть изображения.

+0

Большое спасибо. Я улучшил свой вопрос, потому что думаю, что это было недостаточно ясно. Предполагая, что у меня есть размер GridView в пикселях, как я могу достичь тех двух состояний, которые я представил в своем вопросе? –

+0

Вы также принимаете что-либо о разрешении (ширине, высоте) входных изображений? для единицы измерения вы можете использовать дюйм (например, использовать «1.5in»). Кроме того, я не уверен, в чем проблема. вам просто нужно рассчитать необходимые вам размеры в соответствии с ограничениями, о которых вы решили. –

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