android - superposicion - superposición de pantalla samsung j7
¿Cómo mostraría una vista como una superposición de otra? (3)
Tengo dos vistas que ocupan toda la pantalla y quiero mostrar ambas vistas al mismo tiempo, una encima de la otra. Mi diseño se ve así:
<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
usa onDraw (esta última declaración del método es inválida ()) para dibujar gráficos personalizados. El problema que tengo es que solo muestra myCustomView
, WebView
está oculto. Intenté cambiar el color de fondo de mycustomView
a transparente, pero esto no hace ninguna diferencia.
También me gustaría tener la capacidad de hacer myCustomView
como una superposición en WebView
o viceversa.
El término fill_parent
significa consumir todo el espacio permitido en el padre. Intenta configurarlo para wrap_content
. Luego, puede intentar agregar weight = 1
a ambos para tratar de distribuir uniformemente el espacio restante.
No estoy seguro si puedes hacer esto cuando están en el mismo archivo xml, pero sé que si te mueves:
<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. establezca la vista de contenido en el archivo xml que contiene org.example.myCustomView y llame a esa actividad. en el manifiesto, cuando agregue esa actividad, agregue una declaración de tema así:
android:theme="@android:style/Theme.Dialog"
La declaración completa debe verse así:
<activity android:name=".name_of_activity"
android:label="TextToBeOnTop"
android:theme="@android:style/Theme.Dialog">
</activity>
el resultado se verá así (solo lo hará con sus componentes):
aunque es posible hacerlo cuando aún están en el mismo archivo xml. si es posible, probablemente se haría dejando el manifiesto solo y editando 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" />
(Agregué la declaración del tema en el CustomView)
Si esto no es lo que está buscando, entonces le recomendaría algo similar a lo que dijo Nick Campion, que fue cambiar fillParent a wrapContent. Usted podría hacer eso, o podría elegir qué tamaño desea que sea. Aquí hay dos opciones que podrías usar:
<org.example.myCustomView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50dip"
android:layout_height="50dip" />
(puede cambiar "50dip" a cualquier número que desee, siempre y cuando termine con dip)
o:
<org.example.myCustomView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Use un RelativeLayout
para empezar.
Puede usar ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params)
o una variante junto con ViewGroup.removeView(View view)
o ViewGroup.removeViewAt(int index)
.
Obviamente, esto requerirá que infle las vistas manualmente usando LayoutInflater
pero puede mantener una referencia global para cada una después de inflarlas y simplemente alternar entre las dos.