如何在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中实现Image Gallery?
listview在上gridview在下,如何能够一起滚动?