2010-02-15 20 views
21

He estado jugando con esto durante unos días, con suerte alguien aquí puede echarme una mano.Android vista flotante (sobre otras vistas)

Tengo un diseño simple de dos columnas, el lado izquierdo es una barra de navegación con botones, el lado derecho es un panel de contenido. Cuando el usuario pulsa uno de los botones (digamos, el tercero hacia abajo), me gustaría tener una visión flotante alineado a la derecha de este botón, sino que flota en la parte superior del panel de contenido. Aquí hay una foto para ilustrar lo que quiero decir: empujones Layout

Todo lo que he probado el menú flotante dentro de la barra de navegación o en el interior del panel de contenido, que no es lo que quiero. ¿Algunas ideas? Esto es básicamente lo que tengo hasta ahora:

<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> 
+9

+1 antes del sorteo: P – LuckyMe

+0

Dave, has logrado implementar esto. Necesito hacer algo muy similar, así que me alegrará si comparte algunos aspectos de su implementación. –

Respuesta

14

A FrameLayout le permite tener una vista que se superpone a otra vista. No estoy seguro de que tenga sentido tenerlos con solo una vista secundaria, como lo ha hecho en su ejemplo. Intente tener un FrameLayout al más alto nivel, con su vista "estática" como primer elemento secundario y el menú flotante como segundo hijo.

El developer documents tiene una buena visión general de los tipos de diseño, podría ayudarlo a comenzar.

+2

'RelativeLayout' también admite la superposición de vistas. – CommonsWare

+22

'RelativeLayout' hereda de' FrameLayout'. – Ridcully

+0

Enlace roto en abril de 2017, use [this] (https://developer.android.com/guide/topics/ui/declaring-layout.html) en su lugar – Mendhak

-11

RelativeLayout es lo que quiere.
FrameLayout solo debe tener un hijo, y por lo tanto, por lo general, solo se utiliza para un marcador de posición donde otros diseños aparecen más adelante (como el marco principal de la actividad).
AbsoluteLayout es obsoleto y no debe utilizarse.

RelativeLayout permite que las vistas se superpongan y permite hacer prácticamente todo lo que desee.

+14

FrameLayout puede tener varios elementos secundarios. – ATom

Cuestiones relacionadas