GridView中的水平和垂直中心视图组

时间:2012-04-26 19:45:50

标签: android android-layout gridview

我目前正在实现一个GridView,它连接到一个包含任意数量元素的自定义适配器。

然后,每个元素都显示在一个自定义ViewGroup中,该ViewGroup由一个带有ImageView和两个TextView的垂直LinearLayout组成。我正在根据可用的屏幕区域计算ViewGroup的宽度,并希望在网格内水平和垂直居中。问题是这些项目显示在屏幕的最左边界(没有任何填充)和屏幕的最右边界(也没有任何填充)。如果我为整个GridView设置填充或边距,则滚动条将位于项目的侧面,而不是位于屏幕边缘,看起来很糟糕。这就是为什么我不想为GridView设置填充,而是将元素集中在其中。

这是我的GridView代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:id="@+id/launchLayout"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

   <LinearLayout 
      android:orientation="vertical"
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent">

      <com.markupartist.android.widget.ActionBar
          android:id="@+id/actionbar"
          style="@style/ActionBar"
        />

     <GridView
           android:id="@+id/grid"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
        android:verticalSpacing="@dimen/launch_grid_padding"
        android:horizontalSpacing="@dimen/launch_grid_padding"
           android:numColumns="auto_fit"
           android:stretchMode="columnWidth"
           android:gravity="center"
           android:listSelector="#00000000"
           android:layout_marginTop="@dimen/launch_grid_padding"
           android:layout_marginBottom="@dimen/launch_grid_padding"
     />
   </LinearLayout>

</RelativeLayout>

@ dimen / launch_grid_padding的值为20dp。

这是我的自定义ViewGroup的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/rounded_box"
    android:layout_gravity="center"
>
  <ImageView 
      android:id="@+id/img"
      android:layout_width="120dp"
      android:layout_height="84dp"
      android:scaleType="centerInside"
  />
  <TextView
       android:id="@+id/identifier1"
       android:layout_width="120dp"
       android:layout_height="wrap_content"
       android:background="@android:color/white"
       android:gravity="left|center_vertical"
       android:typeface="sans"
       android:textStyle="bold" 
       android:textColor="#333333"
       android:textSize="12dp"
       android:lines="1"
       android:ellipsize="marquee"
  />
  <TextView
       android:id="@+id/identifier2"
       android:layout_width="120dp"
       android:layout_height="wrap_content"
       android:textColor="#333333"
       android:background="@android:color/white"
       android:gravity="left|center_vertical"
       android:textSize="10dp"
       android:lines="1"
  />
</LinearLayout>

这或多或少是我想要完成的事情(使用可变数量的项目):

http://www.appdesignvault.com/wp-content/uploads/2012/04/iphone-app-design-bizapp-5.jpg

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

指定android:columnWidth并设置android:stretchMode="spacingWidthUniform"并删除android:horizontalSpacingandroid:verticalSpacing。我希望能解决这个问题。