在 GridView 中使用 setGravity()
Posted
技术标签:
【中文标题】在 GridView 中使用 setGravity()【英文标题】:Use of setGravity() in GridView 【发布时间】:2017-04-16 02:34:50 【问题描述】:我无法理解android:gravity 和setGravity() 的使用GridView。
android:gravity
指定每个单元格内的重力。
center_horizontal - 将对象放在其容器的水平中心,不改变其大小。
setGravity(int gravity)
设置此网格的重力。 Gravity 描述了子视图如何水平对齐。默认为 Gravity.LEFT
gravity int:应用到这个网格的孩子的重力
我正在尝试使最后一行居中,如 this question 中所述,但我无法做到。
所以,我试着了解android:gravity
和setGravity()
的用法。
我试过这段代码。
<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 放入其中
layout_gravity:center
RelativeLayout 和设置layout_centerInParent=true
这两种情况都不起作用。
我不能使用TableLayout
,因为我需要在滚动到底部时加载更多数据,所以我需要设置OnScrollListener
提前致谢
【问题讨论】:
【参考方案1】:将GridView
放入RelativeLayout
,然后将GridView
的layout_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 为什么根据您的屏幕截图仅最后一行,据我所知,您将所有行移到中心。那为什么只有最后一行。在您的链接中,最后一行不是中心,但您的问题所有行都不是中心,我正在对此给出答案。
首先我开始将最后一行居中。因为我不能,我试图理解setGravity
或android:gravity=center
,但如果android:layout_width="match_parent"
或wrap_content
也是,你的答案也没有将整个GridView 居中以上是关于在 GridView 中使用 setGravity()的主要内容,如果未能解决你的问题,请参考以下文章
android-TextView setGravity 不起作用
PhysicsRelativeLayout:NullPointerException导致setGravity(...)到PhysicsRelativeLayout