如何在android的GridView中集中最后一个不均匀的行?

Posted

技术标签:

【中文标题】如何在android的GridView中集中最后一个不均匀的行?【英文标题】:How to cenralize last uneven row in GridView in android? 【发布时间】:2013-10-09 23:39:31 【问题描述】:

我有一个 GridView ,它显示字母图片 发生的事情是,每次在最后一行中都有更少的字母。 最后一行左对齐,看起来不太好 所以我想让最后一排在中间, 任何建议

我的GridView 代码:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view"
    android:layout_
    android:layout_marginRight="20dp"
    android:layout_marginTop="20dp"
    android:layout_
    android:numColumns="auto_fit"
    android:columnWidth="70dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="20dp"
    android:gravity="center"
    android:stretchMode="spacingWidthUniform" >  

</GridView>

【问题讨论】:

用另一个适配器包裹您在GridView 上设置的当前适配器,该适配器将插入一些额外的虚拟元素(如果需要),以便您最后的项目居中。 @Luksprog :但没有列取决于屏幕大小,我如何计算要添加更多的元素 我认为您可以使用ViewTreeObserver 并在其中查看GridView 使用了多少列(getNumColumns()),然后基于此触发适配器更改(如果需要,添加元素)价值。小心不要让自己陷入死循环。 @HussainAkhtarWahid'Ghouri':你有没有找到任何完美的解决方案。我还需要在我的项目中实现相同类型的布局。你能和我分享你的布局代码吗?谢谢 @YuDroid :我有这个静态要求,所以我选择了 Table View ,适合我 【参考方案1】:

我有同样的问题,但我使用两个 gridview 来管理这个问题,第一个 gridview 显示除最后一行之外的行,第二个 gridview 显示最后一行。这是实现我需要的最简单的方法。 我还没有找到更好的解决方案。也期待看到一个又好又简单的方法。

【讨论】:

如果您使用两个网格视图,那么我想,表格视图会更方便【参考方案2】:

您可以尝试使用不可见元素,这不是最有效的解决方案,但很简单,您可以放置​​两个元素,一个在开头,一个在行尾并使其不可见

【讨论】:

这应该被否决。如果你 1 在你的行上丢失,这仍然无法解决它,它不会在中心,但会被隐形块替换。【参考方案3】:

对于那些仍在寻找解决方案的人,我对此的看法是,创建一个 TableLayout 并为每个 TableRow 将其权重设置为 android:weightSum="4" 并且不要忘记添加 android:gravity="center"

如需完整代码,请查看gist 以供参考。

【讨论】:

【参考方案4】:

您可以在相对布局内居中网格行,然后将android:layout_centerHorizontal="true" 添加到字母表ImageView 中。假设他们是 ImageView 的。

所以你的GridView 会被包裹在这样的东西中:

<RelativeLayout 
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/grid_view"
        android:layout_
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:layout_
        android:numColumns="auto_fit"
        android:columnWidth="70dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="20dp"
        android:gravity="center"
        android:stretchMode="spacingWidthUniform" >  

    </GridView>
</RelativeLayout>

单个字母图像需要android:layout_centerHorizontal="true",如下所示:

<ImageView
    android:layout_
    android:layout_
    android:layout_centerHorizontal="true"
</ImageView>

【讨论】:

以上是关于如何在android的GridView中集中最后一个不均匀的行?的主要内容,如果未能解决你的问题,请参考以下文章

android 不居中界面限制了控件个数,控件太多就满了怎么办,附图,最后一行

如何在 Android 中禁用 GridView 滚动?

如何在android的Gridview中实现Image Gallery?

listview在上gridview在下,如何能够一起滚动?

如何在 Android 应用程序中集成 BHIM 应用程序支付网关?

如何在 Android App 中集成 OpenCV Manager