Использование setGravity() в GridView

Я не могу понять использование Android: гравитация и setGravity() GridView.

android:gravity

Определяет гравитацию внутри каждой клетки.

center_horizontal - Поместить объект в горизонтальный центр его контейнера, не меняя его размера.

setGravity(int gravity)

Установите гравитацию для этой сетки. Гравитация описывает, как дочерние виды выровнены по горизонтали. По умолчанию Gravity.LEFT

Гравитация int: сила тяжести, чтобы применить к детям этой сетки

Я пытаюсь центрировать последний ряд, как упомянуто в этом вопросе, но я не могу получить это.

Итак, я попытался понять использование android:gravity а также setGravity(),

Я попробовал этот код.

<GridView
     android:id="@+id/grid_view"
     android:stretchMode="none"
     android:numColumns="auto_fit"
     android:columnWidth="140dp"
     android:gravity="right"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

его дочерний вид

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:id="@+id/chapter_item_layout"
    android:minHeight="120dp"
    android:background="@color/red">

    <ImageView
        android:id="@+id/thumbnail_image"
        android:layout_width="68dp"
        android:layout_height="68dp"
        android:scaleType="fitXY"
        android:src="@drawable/icon" />

    <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="16sp"
        android:textColor="@color/black"
        android:maxLines="2"
        android:ellipsize="end"
        android:id="@+id/title" />

</LinearLayout>

и вот так

не StretchMode =

если поменял stretchMode="columnWidth" и вот так

StretchMode =

  • Первое изображение обозначает, что дочерние строки не выровнены вправо.
  • Второе изображение, обозначающее, что содержимое внутри ребенка не выравнивается вправо

Тогда какой смысл устанавливать гравитацию?

Я старался gridView.setGravity(Gravity.CENTER),

Мне нужно отобразить динамические элементы в GridView.

Как я могу отобразить 3-й предмет в центре, если у меня есть 3 предмета?

Я пробовал настройку layout_width="wrap_content" и помещаю мой GridView внутрь

  • LinearLayout и настройка layout_gravity:center
  • RelativeLayout и настройка layout_centerInParent=true

Оба случая не сработали.

Я не могу использовать TableLayout потому что мне нужно загрузить больше данных при прокрутке вниз, поэтому мне нужно установить OnScrollListener

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

1 ответ

Положить ваши GridView внутри RelativeLayout а затем установить GridView"s layout_centerInParent собственность на true,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <GridView
            android:id="@+id/grid_view"
            android:stretchMode="columnWidth"
            android:numColumns="2"
            android:columnWidth="140dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true" />

</RelativeLayout>

Так как:

RelativeLayout дает вам гораздо лучший контроль над позициями детей.

Обновить:

Попробуйте изменить это два свойства

android:stretchMode="columnWidth"
android:numColumns="2"

Удалите это свойство, если вы добавите в GridViewandroid:gravity="right",

Другие вопросы по тегам