GridView中的中心元素

时间:2011-01-27 11:55:55

标签: android gridview

我有2个列中有6个图像的GridView。我想在屏幕中间显示这6张图像。我将重力属性设置为居中,但此中心元素仅水平放置。 GridView占据整个屏幕。

<GridView
    android:id="@+id/gridview"
    android:layout_above="@id/ad" android:layout_alignParentTop="true"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="2"    
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"       
    android:background="#ffffff"
    android:gravity="center"
/>

9 个答案:

答案 0 :(得分:52)

以下是我将gridview中的项目置于中心位置(注意拉伸模式,列宽,重力以及水平和垂直间距):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="5dp" >
    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="100dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:stretchMode="spacingWidthUniform"
        android:verticalSpacing="10dp" />
</LinearLayout>

我花了一段时间才弄明白,但是弄乱了那些不同的价值观,我才能让它们成为中心。

答案 1 :(得分:13)

尝试将GridView包装在LinearLayout中,使其子元素居中,并将gridview的layout_height更改为“wrap_content”。例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="fill_parent"
  android:layout_width="fill_parent"
  android:gravity="center"
  android:layout_gravity="center">
    <GridView 
      android:id="@+id/homeGridView"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:numColumns="3"
      android:verticalSpacing="10dp"
      android:horizontalSpacing="10dp"
      android:stretchMode="columnWidth"
      android:gravity="center" />
</LinearLayout>

答案 2 :(得分:8)

需要设置以下属性:

android:stretchMode="columnWidth"

...和...

android:gravity="center"

答案 3 :(得分:5)

好吧,如果你使用自定义适配器的东西来膨胀gridview中的单行视图,那么尝试将 android:gravity =&#34; center&#34; 添加到你的single_row布局中..这将有希望的伎俩:) 即,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/ivClrBlock"
        android:layout_width="88dp"
        android:layout_height="88dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        />

    <TextView
        android:id="@+id/tvClrName"
        android:layout_width="88dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:text="@string/color_name"
        android:textSize="15sp" />

</LinearLayout>

答案 4 :(得分:1)

我从以下网址更新了gridview适配器时发生了问题:

        gridView = inflater.inflate(R.layout.mobile, null);

        gridView = inflater.inflate(R.layout.mobile, parent, false);

所以如果旧的(null)版本失败,我只是使用try catch反转。

答案 5 :(得分:0)

尝试改变这一点:
android:layout_height="fill_parent"

android:layout_height="wrap_content"

您现在告诉您的网格视图完全填充其父级高度和宽度。

答案 6 :(得分:0)

以下是我的回答:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/linearLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <GridView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="100dip"
        android:gravity="center"
        android:numColumns="3"
        android:stretchMode="spacingWidthUniform"
        android:verticalSpacing="10dip" />
</LinearLayout>

如果您不需要,请不要使用paddinghorizontalSpacing,否则可能会导致其他观点出现问题。

另请注意,fill_parent已弃用。

答案 7 :(得分:0)

我希望这能解决你的问题:

  <LinearLayout
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    <GridLayout
        android:id="@+id/gridlayou4x3"
        android:rowCount="4"
        android:columnCount="3"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="80"
        android:minWidth="25px"
        android:minHeight="25px" />
  </LinearLayout>

答案 8 :(得分:0)

我发现您在gridlayoutheight上只有width封面内容。

android:layout_centerHorizontal="true"

它会以自己需要的大小为中心,但如果你有它与父母相匹配的话。从技术上讲,你的基础是很多父空空间抵消了你的孩子。