Подтвердить что ты не робот

Как избавиться от пробелов в gridview

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

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

Я знаю, что это уже спросил несколько раз здесь, и некоторые из них даже приняли ответы, однако, когда я пытаюсь подать в суд на ответы, как описано выше по 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

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

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

enter image description here

Любые другие идеи о том, как удалить эти кровавые пространства, так что мой вид сетки имеет одинаковый интервал?

Спасибо заранее,

4b9b3361

Ответ 1

Если не установлено иное, 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" />

Ответ 2

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

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

Ответ 3

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

Ответ 4

шаг 1:

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

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