1

i utiliser framelayout et à l'intérieur que j'ai 2 textview, si j'utilisemarges à l'intérieur framelayout ne fonctionne pas dans Android 2.2

android:layout_marginLeft="10dp" 
      android:layout_marginTop="10dp" 

Ma mise en page ne montre pas correcte dans Android 2.2, alors que le même travail bien dans Android 4.0.

Voici le code complet.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

      <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginTop="10dp" 
      android:gravity="left|center" 
      android:text= "Testing String" 
      android:textSize="15sp" 
      android:textColor="@color/LIGHTGRAY" 

      android:layout_gravity="left|top"/> 

     <TextView 

      android:id="@+id/ID_due_date" 
      android:textStyle="bold" 
      android:textSize="15sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:text= "Testing String" 
      android:layout_marginTop="10dp" 
      android:layout_gravity="right" 
      android:gravity="left|center"/> 
     </FrameLayout> 
</ScrollView> 

Dans Android 2.2, il ressemble à ceci

enter image description here

Dans Android 4.0 ICS, il ressemble à ceci

enter image description here

Répondre

3

Il y a un bug dans Android 2.2 (Froyo) et 2.3 (Gingerbread) où les marges à l'intérieur FrameLayout ne sont pas appliquées aux enfants sans layout_gravity ensemble d'attributs. Vous pouvez le voir ici: https://code.google.com/p/android/issues/detail?id=28057
Le bug a été corrigé dans Android 3.0 (Honeycomb).

Votre problème est lié à ce bogue. Vous avez en effet un ensemble d'attributs layout_gravity, donc les marges sont correctement appliquées - les vues sont décalées de 10dp du haut et des côtés. Malheureusement FrameLayout ne sait pas comment mesurer ces enfants, donc ses limites sont calculées sans ces marges - c'est la raison pour laquelle les enfants sont coupés en bas (10dp).

FrameLayout avec la hauteur match_parent ne sera pas affecté par ce problème, mais dans votre cas, vous avez un ensemble de comportements wrap_content. (S'il vous plaît noter que même si vous définissez la hauteur à fill_parent, il fonctionnera toujours comme wrap_content car il est à l'intérieur de ScrollView). À la place, essayez plutôt d'utiliser des paddings - dans la plupart des cas (lorsque les zones de fond ou cliquables ne sont pas importantes), les marges peuvent être remplacées par des paddings.

+0

Oui, les travaux de rembourrage. mais il ne me causera pas de problèmes si je passe à ICS, ou d'autres versions supérieures? – Naruto

+0

Non, il n'y aura aucun problème avec les paddings dans ce cas. Vous pouvez le tester sur ICS (ou plus) si vous voulez :) –

+0

Merci pour votre aide :) – Naruto

1

Vous pouvez utiliser padding:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left|top" 
      android:gravity="left|center" 
      android:paddingLeft="10dp" 
      android:paddingTop="10dp" 
      android:text="Testing String" 
      android:textColor="@color/LIGHTGRAY" 
      android:textSize="15sp" /> 

     <TextView 
      android:id="@+id/ID_due_date" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:gravity="left|center" 
      android:paddingRight="10dp" 
      android:paddingTop="10dp" 
      android:text="Testing String" 
      android:textSize="15sp" 
      android:textStyle="bold" /> 
    </FrameLayout> 

</ScrollView> 
+0

Merci +1, pour votre réponse. Merci – Naruto

Questions connexes