2016-11-23 1 views
0

je l'exemple mise en page XML suivant, tiré de here (enlevé certaines parties sans importance):Pourquoi 'layout_column' ne place-t-il pas l'élément dans un GridLayout?

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:useDefaultMargins="true" 
    android:alignmentMode="alignBounds" 
    android:columnOrderPreserved="true" 
    android:columnCount="4" 
    > 

    <TextView 
     android:text="Email setup" 
     android:textSize="32dip" 
     android:layout_columnSpan="4" 
     android:layout_gravity="center_horizontal" 
     /> 

    <TextView 
     android:text="Email address:" 
     android:layout_gravity="right" 
     /> 

    <EditText 
     android:ems="10" 
     /> 

    <TextView 
     android:text="Password:" 
     android:layout_column="0" 
     android:layout_gravity="right" 
     /> 

    <EditText 
     android:ems="8" 
     /> 

    <Space 
     android:layout_row="4" 
     android:layout_column="0" 
     android:layout_columnSpan="4" 
     android:layout_gravity="fill" 
     /> 

    <Button 
     android:text="Next" 
     android:layout_row="5" 
     android:layout_column="2" 
     /> 
</GridLayout> 

Je change le paramètre pour android:layout_column pour le « Next' bouton dans la dernière ligne de 3 à 2, mais cela ne change pas sa position sur la mise en page:

Next button position

dans ma compréhension dans une grille mise en page J'ai plusieurs colonnes, et le paramètre layout_column spécifie la colonne dans laquelle pour placer l'élément. Mais cela ne semble pas fonctionner. La position de l'élément ne change pas.

Répondre

1

Vous la première colonne se termine à droite de Password (au moins il est android:layout_column="0" indique que)

Ceci est aussi le début de la colonne 1. Mais vous avez spécifié aucun élément dans cette colonne. Donc, il couvre le reste de la largeur de GridLayout.

Il serait préférable de fixer la durée de la colonne seulement à 2, et mis à android:layout_gravity="center_horizontal"

la durée de touche 2
<?xml version="1.0" encoding="utf-8"?> 
<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:useDefaultMargins="true" 
    android:alignmentMode="alignBounds" 
    android:columnOrderPreserved="true" 
    android:columnCount="2"> 

    <TextView 
     android:text="Email setup" 
     android:textSize="32dip" 
     android:layout_columnSpan="2" 
     android:layout_gravity="center_horizontal"/> 

    <TextView 
     android:text="Email address:" 
     android:layout_gravity="right"/> 

    <EditText 
     android:layout_column="1" 
     android:ems="10"/> 

    <TextView 
     android:text="Password:" 
     android:layout_column="0" 
     android:layout_gravity="right"/> 

    <EditText 
     android:layout_column="1" 
     android:ems="8"/> 

    <Space 
     android:layout_row="4" 
     android:layout_column="0" 
     android:layout_gravity="fill"/> 

    <Button 
     android:text="Next" 
     android:layout_row="5" 
     android:layout_gravity="center_horizontal" 
     android:layout_columnSpan="2" 
     android:layout_column="0"/> 

</GridLayout> 
+0

Je vois . Et la première zone EditText définit le bon emplacement de la colonne 2 (ou l'emplacement de gauche de la colonne 3), qui place la zone de texte quelque peu "en dehors" de l'écran? – Alex

+0

La zone EditText précise définit l'emplacement de début du bouton en dehors de l'écran, car toutes les zones de texte sont visibles. Mais je pense que vous avez compris. –

+0

Oui, je pense que j'ai appris quelque chose aujourd'hui. Merci beaucoup! – Alex

2

Vous devez définir android:columnOrderPreserved="false" pour obtenir ce work.Then changement layout_column travaillera