Центрировать элементы в GridView - PullRequest
29 голосов
/ 27 января 2011

У меня есть GridView с 6 изображениями в 2 столбцах.Я хочу отобразить эти 6 изображений в середине экрана.Я установил гравитационные свойства в центр, но этот центр элементов только по горизонтали.GridView занимает весь экран.

<GridView
    android:id="@+id/gridview"
    android:layout_above="@id/ad" android:layout_alignParentTop="true"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="2"    
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"       
    android:background="#ffffff"
    android:gravity="center"
/>

Ответы [ 9 ]

52 голосов
/ 22 ноября 2011

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="5dp" >
    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="100dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:stretchMode="spacingWidthUniform"
        android:verticalSpacing="10dp" />
</LinearLayout>

Мне потребовалось некоторое время, чтобы понять это, но, связавшись с этими различными ценностями, я смог привести их в центр.

13 голосов
/ 15 февраля 2011

Попробуйте обернуть ваш GridView в LinearLayout, центрирующий его дочерние элементы, и измените layout_height вашего gridview на "wrap_content". например:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="fill_parent"
  android:layout_width="fill_parent"
  android:gravity="center"
  android:layout_gravity="center">
    <GridView 
      android:id="@+id/homeGridView"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:numColumns="3"
      android:verticalSpacing="10dp"
      android:horizontalSpacing="10dp"
      android:stretchMode="columnWidth"
      android:gravity="center" />
</LinearLayout>
8 голосов
/ 20 марта 2013

Необходимо установить следующие атрибуты:

android:stretchMode="columnWidth"

... и ...

android:gravity="center"
5 голосов
/ 31 марта 2015

хорошо, если вы используете пользовательский адаптер для раздувания одного вида строки внутри своего вида сетки, попробуйте добавить android: gravity = "center" к макету вашего single_row .. это сделаетНадеюсь, что уловка :) то есть

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/ivClrBlock"
        android:layout_width="88dp"
        android:layout_height="88dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        />

    <TextView
        android:id="@+id/tvClrName"
        android:layout_width="88dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:text="@string/color_name"
        android:textSize="15sp" />

</LinearLayout>
1 голос
/ 01 июня 2017

Проблема возникла, когда я обновил адаптер gridview с:

        gridView = inflater.inflate(R.layout.mobile, null);

до

        gridView = inflater.inflate(R.layout.mobile, parent, false);

, поэтому я просто откатился назад, используя попытку try, если старая (нулевая) версия не удалась.

0 голосов
/ 13 апреля 2017

Я обнаружил, что у вас просто есть содержимое gridlayout на height и width.

android:layout_centerHorizontal="true"

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

0 голосов
/ 06 декабря 2016

Я надеюсь, что это решит вашу проблему:

  <LinearLayout
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    <GridLayout
        android:id="@+id/gridlayou4x3"
        android:rowCount="4"
        android:columnCount="3"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="80"
        android:minWidth="25px"
        android:minHeight="25px" />
  </LinearLayout>
0 голосов
/ 12 августа 2016

Вот мой ответ:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/linearLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <GridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="100dip"
        android:gravity="center"
        android:numColumns="3"
        android:stretchMode="spacingWidthUniform"
        android:verticalSpacing="10dip" />
</LinearLayout>

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

Обратите внимание, что fill_parent уже устарел.

0 голосов
/ 27 января 2011

Попытайтесь изменить это:
android:layout_height="fill_parent"
на
android:layout_height="wrap_content"

Теперь вы указываете вашему сеточному представлению заполнить его родительскую высоту и ширину полностью.

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