Pouvez-vous centrer un bouton dans RelativeLayout?


175

J'essaie de centrer un bouton dans une disposition relative, est-ce possible? J'ai essayé les fonctions Gravité et Orientation mais elles ne font rien.


1
Langue? Cadre? OS?
Arnold Spence

3
@Arnold Spence: tu m'as battu de 24 secondes :)
Nippysaurus

3
Désolé, c'est la première fois que j'utilise Stack Overflow. Oui, je développe pour Android. =)
Arcadia

7
Pas de problème. Les bonnes balises attireront plus rapidement l'attention de la bonne personne. Corrigé :)
Arnold Spence

8
+1 à Arnold Spence pour sa prévenance. Certaines personnes sur SO auraient détruit verbalement le PO pour être simplement "nouveau".
Subby le

Réponses:


371

Essayer

android:layout_centerHorizontal="true"

Exactement comme ça, ça marche pour moi:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

5
Je ne fonctionne pas si vous avez match_parent pour votre largeur.
Ghoti

2
Si vous avez match_parent pour votre largeur, il est déjà centré horizontalement.
ataulm

103

Vous pouvez utiliser CENTER_IN_PARENT pour une mise en page relative.

Ajouter android:layout_centerInParent="true"à l'élément que vous souhaitez centrer dans le RelativeLayout


Qui centre horizontalement et veritcally, comment 'bout layout_centerHorizontal = true
user3076750

37

Arcadia, essayez simplement le code ci-dessous. Il existe plusieurs façons d'obtenir le résultat que vous recherchez, c'est l'une des méthodes les plus simples.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

La définition de la gravité du RelativeLayout lui-même affectera tous les objets placés à l'intérieur. Dans ce cas, c'est juste le bouton. Vous pouvez utiliser n'importe lequel des paramètres de gravité ici, bien sûr (par exemple center_horizontal, top, right, etc.).

Vous pouvez également utiliser ce code ci-dessous:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>

1
Merci. Cependant, si j'avais plusieurs boutons et n'en voulais qu'un centré, comment ferais-je? Le premier code centrerait tout dans la disposition relative parente. Aussi, comment pourrais-je centrer le bouton en haut de sa rangée?
Arcadia

Utilisez simplement le deuxième exemple et ajoutez uniquement centerInParent au bouton que vous souhaitez centrer. Vous pouvez également utiliser centerHorizontal et layout_alignParentTop pour l'aligner sur le haut et le centrer horizontalement. Qu'est-ce que vous essayez de réaliser exactement, je pourrais peut-être donner un meilleur exemple.
Kevin Coppock

Je commence à peine mes études sur le développement d'Android et j'essaie de comprendre pleinement comment manipuler les choses pour faire ce que je veux. Fondamentalement, je veux éviter d'aligner les choses avec des pixels car l'image peut sembler très différente sur un type / une résolution d'écran différent. Cependant, lorsque vous utilisez la commande de gravité, tout la suit. J'ai essayé de désactiver la gravité pour un bouton en utilisant ignoreGravity et cela n'a pas fonctionné. Ce truc est très délicat.
Arcadia

Ouais, ça peut certainement être. Il existe de nombreuses façons de créer une mise en page particulière. Le meilleur moyen est de le dessiner dans votre tête comme vous le souhaitez et de partir de là. Ce tutoriel rapide peut également aider certains: developer.android.com/resources/tutorials/views/…
Kevin Coppock

Ouais, je faisais ce tutoriel. Je suis en train de parcourir chacun des tutoriels et j'apprends à les manipuler complètement, sinon je n'aurai pas une idée de la différence entre chacun d'eux.
Arcadia

25

Résumé

Ajouter:

android:layout_centerInParent="true"

fonctionne uniquement sur RelativeLayout, si l'un des attributs suivants est également défini pour la vue:

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

qui aligne la vue enfant sur la vue parent. Le "centre" est basé sur l'axe de l'alignement que vous avez choisi:

gauche / droite -> vertical

haut / bas -> horizontal

Définition de la gravité des enfants / du contenu dans la vue:

android:gravity="center"

centre l'enfant dans la vue parent dans tous les cas, s'il n'y a pas d'alignement défini. Facultatif, vous pouvez choisir:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

Ensuite il y a:

android:layout_gravity="center"

qui centre la vue elle-même dans son parent

Et enfin, vous pouvez ajouter l'attribut suivant à la vue des parents:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

7

Utilisez l'attribut à l' android:centerInParent="true"intérieur d'une vue, lorsque vous souhaitez centrer la vue dans la disposition relative.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>

5

C'est facile, ne l'alignez sur rien

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>


2

Pour centrer l'alignement dans l'une des directions, utilisez android: layout_centerHorizontal = "true" ou android: layout_centerVertical = "true" dans la mise en page enfant


1

Supprimer tout alignement comme Android: layout_alignParentStart = "true" et ajouter centerInParent a fonctionné pour moi. Si le "align" reste dans, le centerInParent ne fonctionne pas


1

C'est vraiment simple. Essayez le code ci-dessous,

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

1
Les réponses au code uniquement ne sont pas les bienvenues ici. Essayez de publier plus de détails sur les raisons pour lesquelles la réponse ci-dessus fonctionnera. :)
Vivz

Merci pour la ligne directrice. Je suis nouveau ici.
Primesh

0

vous devez l'avoir aligné à gauche ou à droite de la vue parent

n'utilisez aucun de ceux-ci lorsque vous utilisez des android:centerInParent="true"codes: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.