Как избавиться от пробелов в gridview - PullRequest
12 голосов
/ 13 ноября 2011

Эта штука уже давно у меня в голове, и я не могу решить ее.

У меня есть сетка, в которой я отображаю несколько растровых изображений. Я добавляю отступ 5dp на все стороны изображения при заполнении моего изображения через адаптер (iv.setPadding (5, 5, 5, 5);), но почему-то больше места добавляется сверху и снизу на каждом пункт в моем сетке.

Я знаю, что это уже было спросили a несколько раз здесь , и некоторые из них даже приняли ответы, однако, когда я пытаюсь предъявить иск ответы, как описано в URL выше, я по-прежнему получаю одинаковые дополнительные пробелы сверху и снизу.

Есть ли другой способ сделать это в наше время?

Вот мой код:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageGrid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:numColumns="6"
    />

grid_item.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/grid_item_image"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" />

Я попытался добавить следующее в свой атрибут listselector в main.xml

  • @ нуль
  • @ вытяжка / solid_white
  • @ андроид: идентификатор / пустой

Вот как это выглядит с дополнительными пробелами сверху и снизу (те, что по бокам - те, которые я добавляю, как описано выше):

enter image description here

Какие-нибудь другие идеи относительно того, как удалить те кровавые места, чтобы у моего вида сетки было то же самое расстояние?

Заранее спасибо,

Ответы [ 4 ]

24 голосов
/ 21 ноября 2011

Для меня это решило проблему, установив imageview.setAdjustViewBounds(true); в моем классе адаптера.

Кажется, что мои квадратные изображения были автоматически изменены по ширине, но Gridview все еще использовал исходную высоту. При корректировке границ размеры обоих размеров автоматически изменялись, и все элементы отображались плавно даже при включенном режиме растяжения по умолчанию.

8 голосов
/ 13 ноября 2011

Если не установлено иное, GridView переопределит макет, который вы себе представляете, создавая различные способы растяжения. Если вы хотите получить полный контроль над макетом, определив ширину столбцов и размер элементов сетки, вам необходимо установить для свойства GridView stretchMode значение "none" .

<GridView
        ...
        android:stretchMode="none">
</GridView>

Кроме того, вы заполняете родителя шириной GridView. Я думаю, что вы должны обернуть содержимое для ширины, если вы не хотите добавить дополнительную заливку. Где вы добавляете 5dp отступ? Вокруг каждого растрового изображения или вокруг края сетки? Я этого не вижу.

Вы, вероятно, должны заполнить высоту, хотя. (в дальнейшем некоторые из ширины и высоты, вероятно, могут быть заменены на "wrap_content")

Итак, для вас

<?xml version="1.0" encoding="utf-8"?>
<GridView
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageGrid"
    android:stretchMode="none"        
    android:layout_width="XXXdp"
    android:layout_height="fill_content"
    android:numColumns="6"
    />

Кроме того, не уверен, если вам нужен интервал и ширина столбца, который будет примерно таким (или dp вместо wrap_content) - вам может не понадобиться это в вашем GridView - я не уверен:

    android:columnWidth="YYYdp"
    android:horizontalSpacing="0dp"

ImageViews с заполнением 5dp:

<?xml version="1.0" encoding="utf-8"?>
<ImageView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/grid_item_image"
   android:padding="5dp"
   android:layout_width="UUUdp"
   android:layout_height="VVVdp" />
1 голос
/ 13 сентября 2012

Я нашел простой способ обойти это. Просто добавьте android:layout_marginRight в ваш GridView.

0 голосов
/ 16 июля 2013

шаг 1:

android:stretchMode="none"
android:numColumns="auto_fit"
android:gravity="center"

шаг 2: в onMeasure возвращаем рассчитанную ширину и высоту

...