web-dev-qa-db-fra.com

Comment centrez-vous une TextView dans la mise en page?

J'ai une mise en page complexe, dont une partie comporte une valeur centrée sur une étiquette, avec des boutons + et - de chaque côté de la valeur. Je veux que la valeur soit centrée entre les boutons, que ce soit "1" ou "99". Il semble bien quand c'est un nombre à 2 chiffres comme "99", mais quand c'est un seul chiffre, le nombre est justifié à gauche. Comment centrer correctement cette valeur?

Voici la partie de ma mise en page qui fait ceci:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_above="@id/runway_label"
    Android:layout_centerHorizontal="true"
    Android:orientation="horizontal">

    <ImageView
        Android:id="@+id/dec_runway_button"
        Android:src="@drawable/minus_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"/>

    <TextView
        Android:id="@+id/runway_value"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textColor="#FFFFFF"
        Android:textStyle="bold"
        Android:textSize="40.0sp"
        Android:minWidth="50sp"
        Android:layout_centerInParent="true"
        Android:layout_gravity="center"
        Android:shadowColor="#333333"
        Android:shadowDx="2.0"
        Android:shadowDy="2.0"
        Android:shadowRadius="3.0" />

    <ImageView
        Android:id="@+id/inc_runway_button"
        Android:src="@drawable/plus_button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"/>

</LinearLayout>
28
Ken

Il semble que vous souhaitiez centrer le texte dans le TextView, pas le TextView dans la mise en page.

Vous définissez déjà explicitement le minWidth du TextView, ce qui est bien. Avez-vous essayé d'utiliser Android:gravity="center_horizontal" pour le TextView? NE PAS layout_gravity qui est la gravité du TextView au sein du parent, dans ce cas LinearLayout.

41

Voici ce qui a finalement fonctionné pour moi:

        <RelativeLayout Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_centerHorizontal="true">
        <TextView Android:id="@+id/runway_label"
            Android:layout_width="wrap_content" Android:layout_height="wrap_content"
            Android:layout_centerHorizontal="true"
            Android:layout_alignParentBottom="true" Android:gravity="center_horizontal"
            Android:minWidth="110sp" Android:textColor="#66CCFF"
            Android:textStyle="bold" Android:textSize="15sp" Android:text="@string/runway_label" />
        <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_above="@id/runway_label"
            Android:layout_centerHorizontal="true"
            Android:orientation="horizontal">
            <ImageView Android:id="@+id/dec_runway_button" Android:src="@drawable/minus_button"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:layout_gravity="center_vertical"/>
            <TextView Android:id="@+id/runway_value"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:textColor="#FFFFFF"
                Android:textStyle="bold" Android:textSize="40.0sp"
                Android:minWidth="50sp"
                Android:layout_centerInParent="true"
                Android:layout_gravity="center"
                Android:shadowColor="#333333" Android:shadowDx="2.0"
                Android:shadowDy="2.0" Android:shadowRadius="3.0" />
            <ImageView Android:id="@+id/inc_runway_button" Android:src="@drawable/plus_button"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"
                Android:layout_gravity="center_vertical"/>
        </LinearLayout>
    </RelativeLayout>
11
Ken

Si Android:layout_gravity="center_horizontal" ne fonctionne pas, essayez:

        Android:layout_gravity="center_horizontal"
        Android:layout_alignParentTop="true"
        Android:layout_centerHorizontal="true"
2
Oli

Utilisez simplement la ligne ci-dessous ... qui fonctionne bien pour aligner votre TextView au centre.

Android:layout_gravity="center_horizontal"

Exemple..

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="My Text View"
    Android:layout_gravity="center_horizontal"
    Android:textSize="28sp"/>
1
urnish