2 votes

Android - fill_parent ne se comporte pas comme prévu dans RelativeLayout

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

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >

        <ImageButton
            android:id="@+id/buttonLog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/log"
            android:onClick="log" />

    </RelativeLayout>

</FrameLayout>

Je m'attendais à ce que mon bouton apparaisse dans la section centre de l'écran . Cependant, il apparaît au centre TOP de l'écran (c'est-à-dire que le bouton est centré horizontalement, mais pas verticalement).

Il me semble que le RelativeLayout se comporte comme s'il avait été défini avec "wrap_content" au lieu de "fill_parent".

Ce qui est amusant, c'est que, si je donne une valeur réelle à ma propriété RelativeLayout height (Android:layout_height), comme :

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:gravity="center" >

Ensuite, le bouton se comporte correctement (c'est-à-dire que le bouton est également centré verticalement). Mais je ne veux pas utiliser les valeurs réelles. Je veux utiliser fill_parent ! Pourquoi cela ne fonctionne-t-il pas avec "fill_parent" ?

Quelqu'un sait-il ce qui se passe ?

Merci d'avance !

4voto

Christine Points 1601

RelativeLayout vous demande de spécifier la position des éléments dans le Layout. Je ne vois pas de balises layout_below ou layout_toLeftOf. Gravity fonctionne sur les LinearLayouts. En général, les LinearLayouts sont plus faciles à utiliser et s'adaptent beaucoup mieux aux différentes tailles d'écran. Je vous suggère de remplacer le RelativeLayout par un LinearLayout, et aussi le FrameLayout par un LinearLayout. Vous utilisez un FrameLayout typiquement si vous voulez utiliser plusieurs layouts qui se chevauchent, ce que vous ne faites pas.

Je vous recommande de vous renseigner sur l'utilisation des mises en page dans la documentation de référence de l'Android sdk, comme ici : http://bit.ly/djmnn7

1voto

rekaszeru Points 12446

Vous avez spécifié fill_parent pour les deux layout_width y layout_height de votre RelativeLayout Il remplit donc la vue parent. Par défaut, une mise en page relative dispose ses enfants dans le coin supérieur gauche, indépendamment de l'utilisation de l'option fill_parent pour la taille.

Vous devriez obtenir l'aspect désiré en tirant parti de la RelativeLayout's son propre ensemble d'attributs, ce qui vous aide à organiser les vues enfant relativement l'un à l'autre ou à leur parent :

<ImageButton
    android:id="@+id/buttonLog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/log"
    android:onClick="log" />

Utilisation de la android:layout_centerInParent vous pouvez y parvenir. Cet attribut, s'il est défini comme vrai, centre l'enfant horizontalement et verticalement dans son parent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X