11
votes

Android: Layout_marginbottom ne semble pas fonctionner correctement en 2.2 (Froyo)

J'ai ce bloc imageview à l'intérieur d'une mise en page relative:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/excusescreen"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/woodbg">
   <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentTop="true"    
    >
    <ImageView
            android:id="@+id/excHomeBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/catexcusehomebtn"
            >
    </ImageView>
    <ImageView
            android:id="@+id/excBackToCatsBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginTop="7dip"
            android:src="@drawable/backtocats"
            >
    </ImageView>
     </LinearLayout>
     <ViewFlipper
    android:id="@+id/excuses"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dip"
     >
     </ViewFlipper>
     <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imlateTopBar"
    android:layout_width="fill_parent"
    android:layout_height="44dip"
    android:background="@drawable/topandbottombars"
    android:layout_alignParentBottom="true" 
    >
    <ImageView
        android:id="@+id/emailItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/emailit"
        >
    </ImageView>
    <TextView
        android:id="@+id/numExcusesText"
        android:layout_width="100dip"
        android:layout_height="30dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:textColor="#66ffffff"
        android:gravity="center"
        android:textSize="18dip"
        android:textStyle="bold"
        android:text="1/13"
        >
    </TextView>
    <ImageView
        android:id="@+id/shareItBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="7dip"
        android:src="@drawable/shareit"
        >
    </ImageView>
     </LinearLayout>
     <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dip"
    android:layout_marginLeft="81dip"
    android:src="@drawable/swipehelp"
    />

 </RelativeLayout>


5 commentaires

Dans quel conteneur est l'imageView dans?


Voir mon édition pour le conteneur.


Il s'appuie juste juste pour moi. Quelle est la taille du woodbg digue?


C'est 320x455. C'est étrange. Je ne suis tout simplement pas sûr de la raison pour laquelle cela déposait les choses correctement en 1.6 mais pas 2.2


Voir Modifier 2 pour le code de mise en page complet.


5 Réponses :


1
votes

C'était la même chose pour Android 1.6 pour moi jusqu'à ce que je changeais le layout_height code> sur Fill_Parent CODE> sur le "relativation"

apparemment, il ne peut pas obtenir les limites Correct lorsque vous paramètre à wrap_content code>. S'il n'y a pas de raison particulière pour avoir la largeur code> relativenelayout Code> S Largeur et la hauteur pour envelopper son contenu, je dirais-le comme ça. P>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/excusescreen"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/woodbg"
    android:clipChildren="true">
    <!-- all the other stuff -->
</RelativeLayout>


2 commentaires

Merci pour le conseil. Essayé, et toujours pas de chance cependant :-(


Pourriez-vous publier le Woodbg Diable?



3
votes

OK, alors après avoir trouvé un lien avec cette question qui remonte à 09, mais les commentaires de 2010 montrent beaucoup de problèmes avec Alignparentbottom en 2.2. http://code.google.com/p/android/issues/detail ? Id = 1394

Donc, j'ai fait une solution de contournement en mettant tout ce qui est dans un Framelayout et faisais l'imageView un enfant de cela en dehors de mon relativation et placé avec la licête_gravité. Cela a fait l'affaire et a fait travailler dans toutes les versions. Voici le code final: xxx


1 commentaires

J'ai le problème dans un Framelayout, à l'aide de layout_gravity = bas est la chose qui semble le faire fonctionner, mais l'ensemble de la vue (s'il s'agit de remplir_parent ou que le parent est enveloppé) est recadré / déplacé vers le haut au lieu d'être redimensionné :( , comme si la taille était calculée avant les marges.



14
votes

dans le framelayout code> Ajouter un Voir CODE> avec les suivants:

android:layout_above="@+id/gap"


0 commentaires

1
votes

Si vous ne voulez pas ajouter une vue supplémentaire, vous pouvez utiliser un INSETDRAWABLE avec Android: INSETTBOTTOM SET.


0 commentaires

1
votes

Nous avions le même problème et utilisé une linearlayout positionné avec parentbottom, ce qui donne un rembourrage et mettez l'image / la touche / la vue à l'intérieur. En utilisant une marge sur la cible au lieu d'un rembourrage sur les œuvres linéarlayout aussi bien BTW.


0 commentaires