2013-03-19 6 views
0

J'ai un petit fragment de barre latérale que j'ajoute lors de la sélection d'un élément d'action. Il a une largeur fixe et mon désir est que la vue principale apparaisse en plein écran jusqu'à la sélection d'élément d'action quand elle sera légèrement compressée pour permettre à la barre latérale d'apparaître.Barre latérale du fragment Android

J'ai essayé pas mal de choses, y compris le relatif toleftOf/RightOf et diverses combinaisons de disposition/largeur. Je me retrouve toujours avec la barre latérale en plein écran sauf si j'utilise un LinearLayout avec des poids. Le problème avec le poids LinearLayout semi-fonctionnel est qu'il utilise un% de l'écran qui provoque des effets non fiables sur différentes tailles d'écran.

Quelqu'un a-t-il retiré quelque chose de similaire?

______ _ 
|  | | | 
| Main |<-|S| 
|______| |_| 

Actuellement xml semi-travail:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:baselineAligned="false" > 

    <FrameLayout 
     android:id="@+id/frameLayoutImage" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" > 
    </FrameLayout> 

    <!-- This will initially have no content/collapsed --> 
    <FrameLayout 
     android:id="@+id/frameLayoutEdit" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="right|top" 
     android:layout_marginBottom="40dp" 
     android:layout_weight="4" > 

    </FrameLayout> 

</LinearLayout> 

Fragment xml (peut être une largeur fixe):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout /> 

    <Button /> 

    <Button /> 

</RelativeLayout> 

addition de fragments:

// This should just push the frame layout the necessary width to display the fragment 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.frameLayoutEdit, xmpFrag); 

Répondre

1

Ne pas mettre un poids sur la barre latérale; Définissez une taille fixe (ou wrap_content) et définissez la largeur de disposition du contenu principal sur 0dp. En fonction de l'effet souhaité, vous pouvez les placer tous deux dans un FrameLayout afin que la barre latérale recouvre le fragment principal au lieu de réduire le fragment principal, que le fragment principal soit toujours rempli et que la barre latérale ait sa propre taille.

+0

Due à l'orientaiton de quelques éléments je ne voulais pas de superposition. Cela a fonctionné avec quelques modifications. principal 1. layout_width: 0DP 2. layout_weight: 1 Barre latérale: – Anthony

+0

(Got lock-outés de finition du montage de commentaire) Cela a fonctionné avec quelques modifications. principal FrameLayout 1. layout_weight: 1 Note: layout_width: 0DP exige du poids, mais ne change rien la barre latérale FrameLayout: 1. layout_width: wrap_content 2. NO POIDS Encadré: 1. layout_width: 300dp Note: 300 est arbitraire pour votre contenu, wrap_content l'a fait ne jamais afficher – Anthony

+0

Est-ce que votre sidebar est une vue personnalisée? Si c'est le cas, vous devez remplacer onMeasure pour permettre au wrap_content de fonctionner. –

0

Ceci est le code de travail réel à la réponse ci-dessus (merci Scott pour me aider à faire le saut logique):

<FrameLayout 
    android:id="@+id/frameLayoutImage" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
</FrameLayout> 

<!-- This will initially have no content/collapsed --> 
<FrameLayout 
    android:id="@+id/frameLayoutEdit" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="right|top" 
    android:layout_marginBottom="40dp" > 

</FrameLayout> 

Fragment:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="300dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout /> 

    <Button /> 

    <Button /> 

</RelativeLayout>