【问题标题】:How to cenralize last uneven row in GridView in android?如何在android的GridView中集中最后一个不均匀的行?
【发布时间】: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_width="fill_parent"
    android:layout_marginRight="20dp"
    android:layout_marginTop="20dp"
    android:layout_height="fill_parent"
    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 ,适合我

标签: android android-layout android-gridview


【解决方案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_width="wrap_content"
        android:layout_height="wrap_cotent"
        android:orientation="horizontal" >
    
        <GridView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/grid_view"
            android:layout_width="fill_parent"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:layout_height="fill_parent"
            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_width="50dp"
        android:layout_height="50dp"
        android:layout_centerHorizontal="true"
    </ImageView>
    

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多