web-dev-qa-db-fra.com

Android GridLayout centre horizontalement

J'essaie de créer un GridLayout avec 2 colonnes qui seront centrées.

Ma conception actuelle est:

<GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:custom="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    custom:rowCount="4"
    custom:columnCount="2"
    Android:orientation="horizontal">
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:gravity="top|left"
        Android:background="#00FF00"
        custom:color="green"
        custom:layout_row="0"
        custom:layout_column="0" />
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:gravity="top|left"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="blue"
        custom:layout_row="0"
        custom:layout_column="1" />
</GridLayout>

Et ça ressemble à:

Et j'aimerais avoir ces boutons au centre et parfaitement avec un espacement entre eux.

C'est possible?

--ÉDITER:

J'ai également essayé de le mettre dans LinearLayout, sans résultats:

<?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">
    <GridLayout xmlns:custom="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        custom:rowCount="4"
        custom:columnCount="2"
        Android:orientation="horizontal"
        Android:gravity="center"
        Android:layout_gravity="center">
        <TimeTableKeeper.Tile
            Android:layout_width="75dp"
            Android:layout_height="75dp"
            Android:background="#00FF00"
            custom:color="green"
            custom:layout_row="0"
            custom:layout_column="0" />
        <TimeTableKeeper.Tile
            Android:layout_width="75dp"
            Android:layout_height="75dp"
            Android:background="#00FF00"
            custom:color="blue"
            custom:layout_row="0"
            custom:layout_column="1" />
    </GridLayout>
</LinearLayout>
15
Tomasz

Faites en sorte que la grille enveloppe son contenu horizontalement avec layout_width="wrap_content" et définissez c'est layout_gravity à center:

<GridLayout
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_gravity="center"
    // ......
    >
33
razzak

De documentation GridLayout :

La distribution de l'espace excédentaire par GridLayout est basée sur la priorité plutôt que sur le poids.

(...)

Pour étirer une colonne, assurez-vous que tous les composants qu'elle contient définissent une gravité.

Donc, apparemment, vous devez définir le layout_gravity à Android:layout_gravity="top|center" (Je n'ai pas testé cela, mais d'après la documentation, cela devrait être dans ce sens.)

6
njzk2

Tu y es presque. Je pense que cela fera l'affaire:

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<GridLayout

    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    custom:rowCount="4"
    custom:columnCount="2"

    Android:layout_gravity="center_horizontal"
    Android:orientation="horizontal">
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="green"
        custom:layout_row="0"
        custom:layout_column="0" />
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="blue"
        custom:layout_row="0"
        custom:layout_column="1" />
</GridLayout>
</FrameLayout>
4
Jazib