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.

Arcadie
la source
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>
OmbreDieu
la source
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

Josnidhin
la source
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>
Kevin Coppock
la source
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"
Spektakulatius
la source
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>
KarthikKPN
la source
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"/>

Sheychan
la source
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

karma
la source
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

al881
la source
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>
Primesh
la source
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.

Divy sindhu
la source