131 votes

RelativeLayout prend le plein écran pour wrap_content

Pourquoi FOOBARZ se retrouve-t-il tout en bas alors qu'aucun élément n'est layout_height="fill_parent" en d'autres termes, tous les éléments sont wrap_content pour la hauteur ? enter image description here

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/feed_u"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_marginLeft="5dip"
        android:scaleType="centerCrop"
        android:drawableTop="@android:drawable/presence_online"
        android:text="U" />
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/feed_u">
        <ImageView
            android:id="@+id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_minus" />
        <ImageView
            android:id="@+id/feed_ha"
            android:layout_toLeftOf="@id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_plus" />
        <TextView
            android:id="@+id/feed_t"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title">
        </TextView>
        <TextView
            android:id="@+id/feed_a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Band"
            android:layout_below="@id/feed_t">
        </TextView>
        <TextView
            android:id="@+id/feed_s"
            android:layout_below="@id/feed_a"
            android:text="S"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>
        <TextView
            android:id="@+id/feed_tm"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="FOOBARZ"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>

    </RelativeLayout>
</RelativeLayout>

1 votes

Utilisez hierarchyviewer ou la perspective de la vue hiérarchique dans Eclipse pour déterminer où les choses ne vont pas : developer.Android.com/guide/developing/debugging/

0 votes

Où se trouve la perspective de la vue hiérarchique à l'intérieur d'eclipse ? Quel écran ?

1 votes

Fenêtre > Ouvrir la perspective > Autre... -- ... mais je pense que vous avez déjà votre réponse, grâce à @alextc.

0voto

kellogs Points 1220

De bonnes réponses. Maintenant, si vous n'avez pas layout_alignParentBottom="true" et vous avez toujours ce problème, faites attention android:background="@drawable/bkgnd" où bkgnd est un gros morceau.

0voto

JCSG Points 594

Je ne sais pas pourquoi la manière propre et évidente d'accomplir cela n'a pas encore été postée. Cette solution performante fonctionne pour toute vue MyView dont la hauteur est connue.

Enveloppez votre RelativeLayout avec hauteur wrap_content dans un FrameLayout :

<!-- width here should constrain RelativeLayout -->
<FrameLayout 
     android:layout_width="@dimen/my_layout_width"
     android:layout_height="wrap_content">

     <RelativeLayout  
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

     <MyView
        ...
        android:layout_gravity="bottom" />
</FrameLayout>

Notez simplement que la vue située en bas du FrameLayout se trouvera au-dessus de votre RelativeLayout Vous devrez donc ajouter du rembourrage au bas de cette mise en page pour l'accueillir. Si vous souhaitez que cette vue soit de hauteur variable, vous pouvez soit sous-classer FrameLayout pour ajouter du remplissage dans le code en fonction de la hauteur mesurée de la vue, soit simplement changer FrameLayout en LinearLayout vertical si vous n'êtes pas préoccupé par les performances, c'est-à-dire s'il ne s'agit pas d'un élément listview, ou si les vues sont relativement légères.

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