2010-12-13 8 views
0

Je rencontre un problème avec ma mise en page affichée en mode portrait/paysage. Fondamentalement, la hiérarchie de ma mise en page va comme ceci: Main (Vue de l'espace de travail) -> TextView + Listview (w/BaseAdapter) -> Listview Item.J'ai un problème de coupure/de décalage de ma mise en page

Mon problème est, si je commence en mode portrait mes articles s'affichent correctement comme ils le devraient. Mais si je fais tourner l'appareil, ce qui se passe, c'est que ma mise en page entière est décalée d'environ un demi-écran (par exemple, quand je change, environ la moitié du côté gauche de la vue est complètement noire). au milieu de l'écran - je peux voir les éléments qui sont censés être alignés à gauche au milieu). D'un autre côté, si je commence en mode paysage et que je passe en mode portrait, la moitié du côté droit de l'écran est complètement noire et le «bord droit» est au milieu et je peux voir mes objets les plus à droite se terminer.

Voici la mise en page Je travaille avec ... d'abord mon point de vue au sein de l'espace de travail (Listview utilise un BaseAdapter):

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

    <TextView android:id="@+id/tvMainChannel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Disconnected" 
     android:textColor="#FFFFFF" 
     android:singleLine="true"/> 

    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

Et voici mes articles individuels ListView qui sont gonflés dans ce qui précède ListView (dans une disposition horizontale, chaque élément doit afficher de gauche à droite: image, texte, image):

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

    <ImageView android:id="@+id/images" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:paddingLeft="5px" 
     android:paddingRight="5px" 
     android:layout_alignParentLeft="true"/> 

    <ImageView android:id="@+id/images_ping" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:paddingLeft="5px" 
     android:paddingRight="5px" 
     android:layout_alignParentRight="true"/> 

    <TextView android:id="@+id/text" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:gravity="center_vertical" 
     android:text="Username" 
     android:textColor="#FFFFFF" 
     android:layout_toRightOf="@+id/images"/> 

</RelativeLayout> 

J'ai essayé de commutation entre les choses linéaires et relatif, mais je suis devenu pas où .. .kind d'à perte de ce qui pourrait être t Il en est la cause.

Toute idée est très appréciée.

Merci!

EDIT: Pour un peu plus de précisions, voici mon fichier main.xml qui utilise l'espace de travail:

<?xml version="1.0" encoding="utf-8"?> 
<com.test.MultiView xmlns:app="http://schemas.android.com/apk/res/com.test" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mvMain" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    app:default_screen="0"> 

    <include android:id="@+id/main_rtb" layout="@layout/main_rtb" /> 
    <include android:id="@+id/main_listview" layout="@layout/main_listview" /> 
</com.test.MultiView> 

Répondre

1

Mise à jour

La réponse réelle à cette question était un problème avec un composant de disposition de niveau supérieur personnalisé, initialement omis de la question, et qui a été adapté à partir d'un fil ailleurs sur stackoverflow. Voir les commentaires sur cette réponse pour plus de détails.

réponse originale (tout à fait inexact, mais pas tout à fait inutile)

problème doit être dans votre mise en page de l'article. Proposer l'aide d'un LinearLayout (l'attribut « orientation » est pas valable pour RelativeLayout) comme ceci:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal"> 

    <ImageView android:id="@+id/images" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:paddingLeft="5px" 
     android:paddingRight="5px" 
     /> 


    <TextView android:id="@+id/text" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="Username" 
     android:textColor="#FFFFFF" 
     /> 

    <ImageView android:id="@+id/images_ping" 
     android:layout_height="30dp" 
     android:layout_width="wrap_content" 
     android:paddingLeft="5px" 
     android:paddingRight="5px" 
     /> 

</LinearLayout> 

Notez l'utilisation de android:layout_weight et la suppression des RelativeLayout attributs android:layout_alignParentLeft et Spécifiques android:layout_alignParentRight.

+0

Appréciez la réponse. Cela ne semble pas fonctionner. Le TextView (@ + id/tvMainChannel) et ListView (@android: id/list) sont toujours décalés sur l'axe des x, et commencent à ce qui semble être la largeur exacte de l'affichage du portrait en commençant par le bord droit de l'écran aller à gauche (c'est-à-dire commencer x = bord droit en paysage - largeur du portrait). – BCS

+0

Oh je vois. Quelle est la valeur de votre android: screenOrientation dans votre fichier manifeste? –

+0

Il n'y a pas un ensemble dans mon fichier manifeste; cependant, j'utilise android: configChanges = "keyboardHidden | orientation" pour éviter que mon activité ne soit détruite lors de la rotation de l'écran – BCS