web-dev-qa-db-fra.com

Centrer les éléments dans GridView

J'ai GridView avec 6 images sur 2 colonnes. Je veux afficher ces 6 images au milieu de l'écran. Je règle les propriétés de gravité au centre, mais ce centre ne s’élève qu’à l’horizontale. GridView prend tout l'écran.

<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"
/>
28
bimbol

Voici ce que j'ai fait pour que les éléments de la grille soient centrés (remarquez le mode stretch, la largeur de colonne, la gravité et l'espacement horizontal et 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>

Il m'a fallu un certain temps pour le comprendre, mais en jouant avec ces différentes valeurs, j'ai pu les amener à se centrer.

52
Ray Hunter

Essayez d'encapsuler votre GridView dans un LinearLayout qui a ses éléments enfants centrés et modifiez layout_height de votre gridview en "wrap_content". ex:

<?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>
13
Nelson Monterroso

Besoin de définir les attributs suivants:

Android:stretchMode="columnWidth"

...et...

Android:gravity="center"
8
homelink

eh bien, si vous utilisez un adaptateur personnalisé pour gonfler une seule vue dans votre grille, essayez d’ajouter Android: gravity = "center" à la mise en page de votre single_rowc'est à dire,

<?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>
5
ankit purwar

Un problème est survenu lorsque j'ai mis à jour l'adaptateur gridview à partir de:

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

à 

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

donc je viens de revenir en arrière en utilisant un catch try si l'ancienne version (null) a échoué.

1
John Ashmore

J'espère que cela résoudra votre problème:

  <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
Hamad Al-Absi

Voici ma réponse:

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

N'utilisez pas padding ou horizontalSpacing si vous n'en avez pas besoin, car cela pourrait causer des problèmes avec d'autres vues.

Notez également que fill_parent est déjà obsolète.

0
piotrek1543

Essayez de changer cela:
Android:layout_height="fill_parent"
dans
Android:layout_height="wrap_content"

Vous dites maintenant à votre vue de grille de remplir pleinement la hauteur et la largeur de son parent.

0
svidnas

J'ai constaté que vous ne disposiez que du contenu gridlayout sur height et width

Android:layout_centerHorizontal="true"

Il se centrera pour la taille dont il a besoin, mais si vous le faites correspondre au parent. Vous le centrez techniquement sur la base d’un grand espace vide parent qui compense vos enfants. 

0
Chris