Android vue flottant (sur d'autres vues)
-
20-09-2019 - |
Question
J'ai été déconner avec ça pendant quelques jours maintenant, nous espérons que quelqu'un ici peut me donner un coup de main.
J'ai une mise en page simple à deux colonnes, le côté gauche est une barre de navigation avec des boutons, le côté droit est un panneau de contenu. Lorsque l'utilisateur tape l'un des boutons (disons, le troisième vers le bas), je voudrais avoir une vue flottante aligné à droite de ce bouton, mais flottant au-dessus du volet contenu. Voici une image pour illustrer ce que je veux dire:
Tout ce que j'ai essayé enfile le menu flottant dans la barre de navigation ou à l'intérieur du panneau de contenu, ce qui est pas ce que je veux. Des idées? Voici en gros ce que j'ai à ce jour:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_alignParentLeft="true"
android:id="@+id/navigation_bar"
>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.14"
>
<ImageButton
android:id="@+id/button1_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon"
android:layout_gravity="center"
/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.14"
>
<ImageButton
android:id="@+id/button2_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon"
android:layout_gravity="center"
/>
</FrameLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.14"
android:layout_toRightOf="@id/navigation_bar"
>
</FrameLayout>
</RelativeLayout>
La solution
Un FrameLayout vous permet d'avoir une vue qui se chevauchent une autre vue. Je ne suis pas sûr qu'il est logique de les avoir avec une seule vue enfant, que vous avez dans votre exemple. Essayez d'avoir un FrameLayout au plus haut niveau, avec votre point de vue « statique » comme le premier élément enfant, et le menu flottant comme le deuxième enfant.
Les documents de développeur ont une bonne vue d'ensemble les types de mise en page, il pourrait vous aider à démarrer.
Autres conseils
RelativeLayout
est ce que vous voulez.
FrameLayout
ne doit avoir un enfant, et est donc, en général, utilisé uniquement pour un espace réservé où d'autres dispositions viennent plus tard (comme le cadre principal de l'activité).
AbsoluteLayout
est dépréciée et ne doit pas être utilisé.
RelativeLayout
permet aux vues de se chevaucher, et permet de faire, à peu près, tout ce que vous voulez.