2011-01-27 16 views
24

Tengo GridView con 6 imágenes en 2 columnas. Quiero mostrar estas 6 imágenes en el medio de la pantalla. Establecí las propiedades de gravedad en el centro pero estos elementos centrales solo horizontalmente. GridView toma toda la pantalla.Elementos del centro en 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" 
/> 

Respuesta

0

tratar de cambiar esto:
android:layout_height="fill_parent"
en
android:layout_height="wrap_content"

Ahora está diciendo a su vista de cuadrícula para llenar su altura y la anchura de los padres totalmente.

+0

Gracias. Intenté de esta manera, pero esto no solucionó el problema, los elementos no se centran verticalmente dentro de GridView. – bimbol

+0

Estoy un poco confundido, pero intentaré ayudar. ¿Has intentado configurar el padre GridView para centrar todos sus elementos? También podría tratar de cambiar el atributo de gravedad a otra cosa y ver si eso ayuda. Aquí está el enlace a posibles atributos http://developer.android.com/reference/android/widget/GridView.html#attr_android:gravity – svidnas

12

Pruebe envolviendo su GridView en LinearLayout que tiene sus elementos secundarios centrados y cambie el layout_height de su gridview a "wrap_content". por ejemplo:

<?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> 
+0

de todo lo que pude encontrar en SO, esta fue la única respuesta que funcionó para mí –

51

Esto es lo que hice para conseguir los artículos en el gridview para centrar (nótese la stretchmode, columnwidth, la gravedad y el espacio horizontal y vertical):

<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> 

Me tomó un tiempo para resolverlo, pero al jugar con esos valores diferentes fui capaz de hacerlos centrar.

+0

Gracias me ayudó :-D –

+0

para mí 'HorizontalSpacing' causó algunos problemas con' spacingWidthUnfirom' pero estaba bien después de que lo eliminé –

+1

Encontré que android: layout_centerHorizontal = "true" lo hizo por mí – T0m

8

necesidad de establecer los siguientes atributos:

android:stretchMode="columnWidth" 

... y ...

android:gravity="center" 
5

bien, en caso de que están usando una cosa adaptador personalizado para inflar sola rowview dentro de su gridview entonces intente agregar android: gravedad = "centro" al diseño de su single_row ... esto hará el truco con suerte :) es decir,

<?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> 
0

Aquí es mi respuesta:

<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> 

No utilice padding o horizontalSpacing si no lo necesita, ya que puede causar problemas con otros puntos de vista.

Tenga en cuenta también que fill_parent ya está en desuso.

0

espero que esto va a resolver su problema:

<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> 
0

me encontré con que sólo tiene el contenido gridlayout envoltura en height y width.

android:layout_centerHorizontal="true" 

Se centrará para el tamaño que necesita, pero si lo tiene que hacer coincidir el padre. Lo estás centrando técnicamente en función de una gran cantidad de espacio vacío para padres que compensa a tus hijos.

0

emisión se produjo cuando he actualizado el adaptador de gridview:

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

a

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

por lo que sólo invertí las imágenes utilizando un intento de captura si el viejo (null) Versión falló.

Cuestiones relacionadas