2010-04-04 6 views
4

J'ai un problème avec chevauchement des vues dans un RelativeLayout sur Android 1.5 ... Tout fonctionne correctement sur Android 1.6 et supérieur. Je comprends que Android 1.5 a quelques problèmes avec RelativeLayout, mais je n'ai pas pu trouver quelque chose sur StackOverflow ou le groupe de débutants android pour mon problème spécifique.Voir chevauchement avec RelativeLayout sur Android 1.5

Ma mise en page se compose de quatre sections, dont chacune sont constitués d'un TextView, une galerie et un autre TextView aligné verticalement:

Apps en cours
Applications récentes
Services
Processus

Lorsque les quatre ensembles de ces éléments sont affichés tout fonctionne bien. Cependant, mon application permet à l'utilisateur de spécifier que certaines d'entre elles ne sont pas affichées. Si l'utilisateur désactive l'exécution des applications, des applications récentes ou des services, les sections restantes se chevauchent soudainement.

Voici mon code pour la mise en page. Je ne suis pas sûr de ce que je fais mal. Lorsque l'utilisateur désactive l'affichage d'une section que j'utilise le paramètre de visibilité View.GONE:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical" 
    android:layout_gravity="center_vertical" 
    android:background="@null" 
> 
<!-- Running Gallery View Items --> 
<TextView 
    style="@style/TitleText" 
    android:id="@+id/running_gallery_title_text_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:paddingLeft="1sp" 
    android:paddingRight="10sp" 
    android:text="@string/running_title" 
/> 

<Gallery 
    android:id="@+id/running_gallery_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/running_gallery_title_text_id" 
    android:spacing="5sp" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:unselectedAlpha=".5" 
/> 

<TextView 
    style="@style/SubTitleText" 
    android:id="@+id/running_gallery_current_text_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/running_gallery_id" 
    android:gravity="center_horizontal" 
/> 

<!-- Recent Gallery View Items --> 
<TextView 
    style="@style/TitleText" 
    android:id="@+id/recent_gallery_title_text_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/running_gallery_current_text_id" 
    android:gravity="left" 
    android:paddingLeft="1sp" 
    android:paddingRight="10sp" 
    android:text="@string/recent_title" 
/> 

<Gallery 
    android:id="@+id/recent_gallery_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/recent_gallery_title_text_id" 
    android:spacing="5sp" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:unselectedAlpha=".5" 
/> 

<TextView 
    style="@style/SubTitleText" 
    android:id="@+id/recent_gallery_current_text_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/recent_gallery_id" 
    android:gravity="center_horizontal" 
/> 

<!-- Service Gallery View Items --> 
<TextView 
    style="@style/TitleText" 
    android:id="@+id/service_gallery_title_text_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/recent_gallery_current_text_id" 
    android:gravity="left" 
    android:paddingLeft="1sp" 
    android:paddingRight="10sp" 
    android:text="@string/service_title" 
/> 

<Gallery 
    android:id="@+id/service_gallery_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/service_gallery_title_text_id" 
    android:spacing="5sp" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:unselectedAlpha=".5" 
/> 

<TextView 
    style="@style/SubTitleText" 
    android:id="@+id/service_gallery_current_text_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/service_gallery_id" 
    android:gravity="center_horizontal" 
/> 
</RelativeLayout> 

Je le xml pour omises la section Processus dans un (peu vain) essayer de garder ce court ...

Que puis-je faire pour que cela fonctionne dans Android 1.5? Je ne pense pas que ce soit juste une question de réorganisation des vues dans le xml car cela fonctionne bien quand tout est affiché.

Répondre

4

Deux solutions possibles:

  • Essayez de régler INVISIBLE au lieu de GONE la hauteur de l'élément à 0 ou 1 px et la visibilité.
  • Enveloppez chaque objet Gallery/TextView dans un LinearLayout défini sur wrap_height et définissez les paramètres ci-dessus/en même temps sur les dispositions au lieu des sous-vues. Définissez ensuite les sous-éléments à View.GONE, en laissant les dispositions linéaires utilisés pour le positionnement relatif encore visible, mais avec une hauteur enveloppé 0.

L'idée avec soit la solution est de vous assurer que vous n'êtes jamais positionner quelque chose par rapport à un vue c'est View.GONE; Je suppose que c'est la source du bug que vous rencontrez.

Si je peux demander, cependant ... pourquoi avez-vous même besoin d'utiliser un RelativeLayout ici? D'après ce que je peux voir d'un coup d'œil, tout ici serait bien dans un LinearLayout vertical, et semble en fait conceptuellement plus simple pour cet arrangement.

+0

Merci pour vos suggestions ... Je vais essayer. Ceci est ma mise en page pour le mode portrait ... Avec le mode paysage, il devient un peu plus compliqué et nécessiterait plusieurs LinearLayouts imbriqués. Bien que je puisse utiliser LinearLayout en mode portrait, j'ai toujours le même problème en mode paysage. – Justin

Questions connexes