2011-02-04 10 views
29

Tengo dos vistas que ocupan toda la pantalla y quiero mostrar ambas vistas al mismo tiempo, una encima de la otra. Mi diseño es el siguiente:¿Cómo puedo mostrar una vista como una superposición de otra?

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

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

    <org.example.myCustomView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

</LinearLayout> 

Tenga en cuenta que myCustomView utiliza onDraw (este método última afirmación es invalida()) para dibujar gráficos personalizados. El problema que estoy recibiendo es que solo muestra myCustomView, WebView está oculto. Traté de cambiar el color de fondo de mycustomView a transparente, pero esto no hace la diferencia.

También me gustaría tener la capacidad de hacer myCustomView como una superposición en WebView o viceversa.

Respuesta

23

Utilice un RelativeLayout para empezar.

Puede usar el ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params) o una variante junto con ViewGroup.removeView(View view) o ViewGroup.removeViewAt(int index).

Esto obviamente requeriría que infle las vistas manualmente usando LayoutInflater, pero podría mantener una referencia global de cada una después de inflar y simplemente cambiar entre las dos.

+3

Gracias! Solo cambié LinearLayout a RelativeLayout y funcionó. Las otras 2 respuestas no funcionaron. – ace

+0

Su bienvenida. Todo lo mejor: D – techiServices

+0

'FrameLayout' también es bueno si no te preocupa posicionar las cosas entre sí. –

-1

El término fill_parent significa que consume todo el espacio permitido en el elemento primario. Intente configurarlo en wrap_content. Luego puede intentar agregar weight = 1 a ambos para tratar de distribuir de manera uniforme el espacio restante.

15

no estoy seguro de si se puede hacer esto cuando están en el mismo archivo XML, pero sé que si se mueve:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

a otro archivo XML, y crear otra actividad. configure la vista de contenido en el archivo xml que contiene org.example.myCustomView y llame a esa actividad. en el manifiesto, al agregar que la actividad, agregar una declaración el tema como tal:

android:theme="@android:style/Theme.Dialog" 

la declaración completa debería tener este aspecto:

<activity android:name=".name_of_activity" 
    android:label="TextToBeOnTop" 
    android:theme="@android:style/Theme.Dialog"> 
</activity> 

el resultado se verá así (sólo será con sus componentes en su lugar):

enter image description here

aunque mabey posible hacerlo cuando todavía están en el mismo archivo XML. si es posible, es probable que se hace dejando el manifiesto solo, y la edición de su costomeView a lo siguiente:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:theme="@android:style/Theme.Dialog" /> 

(I añade el comunicado en el tema CustomView)

si esto no es lo que estás buscando, entonces recomendaría algo similar a lo que dijo Nick Campion, que era cambiar fillParent por wrapContent. puede hacerlo, o puede elegir el tamaño que desea que sea. aquí hay dos opciones que puede usar:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="50dip" 
    android:layout_height="50dip" /> 

(que podría cambiar "50dip" a cualquier número que desee, siempre y cuando se termina con la inmersión)

o:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
Cuestiones relacionadas