在 GridView 中使用 setGravity()

Posted

技术标签:

【中文标题】在 GridView 中使用 setGravity()【英文标题】:Use of setGravity() in GridView 【发布时间】:2017-04-16 02:34:50 【问题描述】:

我无法理解android:gravity 和setGravity() 的使用GridView。

android:gravity

指定每个单元格内的重力。

center_horizo​​ntal - 将对象放在其容器的水平中心,不改变其大小。

setGravity(int gravity)

设置此网格的重力。 Gravity 描述了子视图如何水平对齐。默认为 Gravity.LEFT

gravity int:应用到这个网格的孩子的重力

我正在尝试使最后一行居中,如 this question 中所述,但我无法做到。

所以,我试着了解android:gravitysetGravity()的用法。

我试过这段代码。

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

它的子视图

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

    <ImageView
        android:id="@+id/thumbnail_image"
        android:layout_
        android:layout_
        android:scaleType="fitXY"
        android:src="@drawable/icon" />

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

</LinearLayout>

就这样来了

如果更改了stretchMode="columnWidth",它会是这样的

表示子行未右对齐的第一张图片。 第二张图片表示子元素内的内容没有右对齐

那么设置重力有什么用呢?

我试过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,然后将GridViewlayout_centerInParent 属性设置为true

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

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

</RelativeLayout>

因为:

RelativeLayout 让您更好地控制孩子的位置。

更新日期:

尝试改变这两个属性

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

如果您添加GridView android:gravity="right",请删除此属性。

【讨论】:

不,它不起作用,因为 GridView 将它的宽度作为整个屏幕,所以没有用使它相对于它的父级居中,我现在也按照你说的那样尝试了,但它不起作用 @VigneshSundar 你是否想要你的GridView 完整尺寸,因为我不明白你想要什么,请发布你想要的屏幕截图? 请仔细和完整地阅读问题,我正在尝试将最后一行居中,如this question 中提到的那样,该问题包含清晰的图像,因为我已经使用了 2 个图像,复制粘贴图像问题会使我的问题变得糟糕 @VigneshSundar 为什么根据您的屏幕截图仅最后一行,据我所知,您将所有行移到中心。那为什么只有最后一行。在您的链接中,最后一行不是中心,但您的问题所有行都不是中心,我正在对此给出答案。 首先我开始将最后一行居中。因为我不能,我试图理解setGravityandroid:gravity=center,但如果android:layout_width="match_parent"wrap_content 也是,你的答案也没有将整个GridView 居中

以上是关于在 GridView 中使用 setGravity()的主要内容,如果未能解决你的问题,请参考以下文章

android-TextView setGravity 不起作用

PhysicsRelativeLayout:NullPointerException导致setGravity(...)到PhysicsRelativeLayout

以编程方式在TextView中设置文本对齐方式

设置文本重心垂直在android编辑文本中不起作用

android gridlayout 怎么能使每一个格能均等分割屏幕

1.11 定制toast消息