Как избавиться от пробелов в 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]()
Любые другие идеи о том, как удалить эти кровавые пространства, так что мой вид сетки имеет одинаковый интервал?
Спасибо заранее,
Ответы
Ответ 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 возвращает вашу расчетную ширину и высоту