2017-10-15 2 views
1

Après avoir cherché une première solution (par exemple here) Je suis tombé sur la solution suivante:Comment centrer horizontalement un bouton dans un RelativeLayout?

android:layout_centerHorizontal="true" 

qui ne fonctionne pas pour moi (voir troisième bouton). Ci-dessous l'exemple complet de trois boutons dans un RelativeLayout, dans lequel le bouton du milieu doit être centré (horizontalement et verticalement, le bouton est), et les deux autres boutons sont censés être symétriques placés sur l'écran, horizontalement centré. Cependant, ils ne le sont pas, en utilisant la solution suggérée que j'ai trouvée plusieurs fois.

Alors, qu'est-ce qui me manque?

code complet:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/checkscreen" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.impyiablue.checkpoint.CheckScreen"> 

    <RelativeLayout 
     android:id="@+id/content" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginTop="20dp" 
     android:layout_weight="1" 
     android:orientation="vertical"> 


     <Button 
      android:id="@+id/check_cancel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/check_next" 
      android:textSize="20sp" 
      android:padding="25dip" 
      android:layout_alignParentTop="true" 
      android:layout_alignLeft="@+id/check_now" 
      android:layout_alignStart="@+id/check_now" 
      android:layout_marginTop="50dp" /> 

     <Button 
      android:id="@+id/check_now" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:text="@string/check_now" 
      android:padding="70dip" 
      android:textSize="20sp" /> 

     <Button 
      android:id="@+id/check_redo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:text="@string/check_redo" 
      android:textSize="20sp" 
      android:padding="25dip" 
      android:layout_alignParentBottom="true" 
      android:layout_alignLeft="@+id/check_now" 
      android:layout_alignStart="@+id/check_now" 
      android:layout_marginBottom="50dp" /> 

    </RelativeLayout> 


</LinearLayout> 

Screenshot

+0

Peut être 'android: layout_alignLeft' en conflit avec' android: layout_centerHorizontal'. Si vous voulez le centre horizontal pourquoi utiliser encore l'alignement de mise en page? – nhoxbypass

Répondre

2

`

<Button 
      android:id="@+id/check_redo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:text="@string/check_redo" 
      android:textSize="20sp" 
      android:padding="25dip" 
      android:layout_alignParentBottom="true" 
      android:layout_marginBottom="50dp" /> 

` vous pouvez essayer d'utiliser RelativeLayout comme votre mise en page de racine, ce qui rendra les choses plus faciles à gérer.

+0

Bonne suggestion, mais cela ne résout pas mon problème réel ... – Alex

+0

c'est parce que vous avez défini certains attributs à d'autres boutons, à savoir que vous avez utilisé le positionnement relatif, les supprimer, il va fonctionner, – himel

+0

0

Je vous recommande d'utiliser weightSum et la propriété layout_weight pour créer 3 boutons horizontalement et afficher uniquement celle du milieu en appliquant la visibilité INVISIBLE sur l'autre 2 (premier et dernier)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/checkscreen" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" android:weightSum="9"> 
<Button android:layout_width="wrap_content" 
android:layout_height="match_parent" android:layout_weight="3" android:visibility="invisible"></Button> 
<Button android:layout_width="wrap_content" 
android:layout_height="match_parent" android:layout_weight="3" android:visibility="visible"></Button> 
<Button android:layout_width="wrap_content" 
android:layout_height="match_parent" android:layout_weight="3" android:visibility="invisible"></Button> 
</LinearLayout> 

S'il vous plaît ajouter des paramètres nécessaires ce code est juste pour démontrer l'idée.

0

Utilisez android:layout_gravity=center sur ce button. Exemple -

<Button 
      android:id="@+id/check_cancel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/check_next" 
      android:textSize="20sp" 
      android:padding="25dip" 
      android:layout_gravity=center 
      android:layout_marginTop="50dp" /> 

Ou pour centrer l'alignement de tous les sous-vues d'un parentview ou la mise en page, il suffit d'utiliser android:gravity=center sur la vue parent ou mise en page

0

Layouts comme cela devrait être fait en utilisant LinearLayout car il prend en charge le poids tout en RelativeLayout n » t! Fichier de mise en page fonctionnant et testé dans Android Studio:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/checkscreen" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="layout_centerHorizontal" 
    android:gravity="center" 
    android:orientation="vertical"> 


    <Button 
     android:id="@+id/check_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="0sp" 
     android:layout_marginTop="50dp" 
     android:layout_weight="1" 
     android:padding="25dip" 
     android:text="check_next" 
     android:textSize="20sp" /> 

    <Button 
     android:id="@+id/check_now" 
     android:layout_width="wrap_content" 
     android:layout_height="0sp" 
     android:layout_weight="1" 
     android:padding="70dip" 
     android:text="check_now" 
     android:textSize="20sp" /> 

    <Button 
     android:id="@+id/check_redo" 
     android:layout_width="wrap_content" 
     android:layout_height="0sp" 
     android:layout_marginBottom="50dp" 
     android:layout_weight="1" 
     android:padding="25dip" 
     android:text="check_redo" 
     android:textSize="20sp" /> 


</LinearLayout>