Problèmes d'alignement avec le bouton à deux lignes

j'essaie de comprendre pourquoi un bouton à deux lignes dans mon application est décalé de quelques pixels plus bas que les autres boutons:

An error dialog.  The error message is "Error: No internet connection.  Please check your connection settings and try again."  There are three buttons beneath the error message: Retry, Cancel, and Network Settings.  The Network Setting button is a few pixels lower than the other buttons.

cela ne se produit pas si je raccourcis le texte sur le troisième bouton jusqu'à ce qu'il s'adapte sur une ligne, ce qui me dit qu'il a quelque chose à voir avec la rupture de ligne. L'ajout d' android:layout_gravity="top" à la disposition du bouton ne semble pas aider. Une idée de ce qui pourrait être la cause de celle-ci?

Edit: Voici le mise en page fichier XML:

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

  <TextView android:id="@+id/error_text"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dip"
            android:text="Place holder"
            android:layout_width="wrap_content"
            android:textSize="17dip"/>

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center_horizontal"
                android:padding="10dip"
                android:layout_width="wrap_content">
    <Button android:id="@+id/ok_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/ok"
            android:textColor="@color/black"
            android:textStyle="bold"/>

    <Button android:id="@+id/cancel_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dip"
            android:text="@string/cancel_login"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:visibility="gone"/>

    <Button android:id="@+id/third_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dip"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:visibility="gone"/>
  </LinearLayout>
</LinearLayout>
23
demandé sur Amanda S 2011-08-03 00:26:19

5 réponses

horizontal LinearLayout aligne les lignes de base de tous ses enfants contrôles par défaut. Ainsi la première ligne de texte dans votre bouton multi-ligne est alignée verticalement avec la ligne simple de texte dans les autres boutons.

Pour désactiver ce comportement, set android:baselineAligned="false" sur le LinearLayout.

73
répondu Karu 2011-11-28 00:21:28

Avoir jeté un oeil à votre disposition (sur l'appareil), je ne suis pas sûr pourquoi, il présente ce comportement étrange. Lors du débogage des layouts, j'aime mettre des couleurs d'arrière-plan sur les vues pour que vous puissiez voir plus clairement l'espace qu'elles occupent. Si nous enlevons tout le rembourrage, nous voyons que les boutons ne s'assoient tout simplement pas sur la même ligne du haut. Si nous appliquons android:gravity="center_vertical" de la LinearLayout nous voyons que les deux premiers boutons sont centrés, mais le dernier est assis confortablement avec le bord supérieur.

On la solution à cela est juste de réécrire le conteneur intérieur en utilisant un RelativeLayout:

<RelativeLayout
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_width="wrap_content">

<Button android:id="@+id/ok_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ok"
        android:textColor="@color/black"
        android:textStyle="bold"/>

<Button android:id="@+id/cancel_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dip"
        android:layout_toRightOf="@id/ok_button"
        android:text="@string/cancel_login"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:visibility="gone"/>

<Button android:id="@+id/third_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dip"
        android:layout_toRightOf="@id/cancel_button"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:visibility="gone"/>
</RelativeLayout>

De mes tests, en utilisant un RelativeLayout vous pouvez obtenir tous les boutons pour s'asseoir sur le même bord supérieur.

4
répondu antonyt 2011-08-02 21:08:33

j'ai entré votre code avec le changement suivant et ça a bien marché: Changer l'android: gravity dans la disposition linéaire horizontale de "center_horizontal" à "Centre".

2
répondu Lior Ohana 2011-08-02 21:27:56

j'ai ajouté les lignes suivantes à votre troisième bouton en XML et il est la hauteur de "fill_parent" :

android:paddingTop="4dp"
android:layout_height="fill_parent"

pour moi, 4dp a bien fonctionné vous pouvez vérifier si vous avez besoin de plus ou moins.

Faire ces changements et votre bouton sera fine, à l'instar de ses congénères :-)

2
répondu Khawar 2011-08-03 04:53:46

écrire android: layout_height= "fill_parent" pour les trois boutons

0
répondu AndroGeek 2012-05-19 11:27:26