Colocación / superposición (índice-z) una vista encima de las pestañas de la barra de acciones
Tengo una vista que dibuja algo fuera del fragmento que lo contiene y lo configuré para dibujar el contenido fuera de él usando esto .
El problema es que funciona en todas partes, pero en las pestañas ActionBar y ActionBar.
- ¿Existe una solución para el error de navegador de Android con la posición CSS y las áreas seleccionables?
- Los datos de tráfico se muestran por encima de las formas dibujadas (polilíneas) en Android Google Maps API v2
- La entrada en los resultados de autocompletar de jQuery se activa al seleccionar del resultado
- Canvas Cambia dinámicamente el índice z de un mapa de bits
- Chrome en Android no respeta el índice z para los clics de enlace
mActionBar.addTab( mActionBar.newTab() .setCustomView(t));
Estoy usando appCompat y agregando pestañas de esta manera:
He añadido android:clipChildren="false"
a todas las vistas de los padres, pero no funciona sólo para las pestañas ActionBar y ActionBar.
La vista deseada:
Pero el resultado es el siguiente:
- Diferente posición z para los elementos ListView
- JQuery Mobile: el texto de entrada enfocado no respeta el índice z, que aparece por encima de todo lo demás
- AndEngine- Dibujo del niño del sprite detrás de su padre
- Z-index en Disposición relativa
- app falla cuando cambio el orden de mi XML RelativeLayout android
- Vista de visualización en la parte superior de la barra de acción
- Colocación / superposición (z-index) una vista sobre otra vista en android
- Cómo establecer el índice z utilizando algunos valores enteros
No es fácil ayudarte sin el código fuente completo; De todos modos puedo sugerirle un acercamiento alternativo que pueda satisfacer su caso.
Si está creando un elemento flotante personalizado (tal vez utilizado para un tutorial o una sugerencia), debe evitar alterar la jerarquía de vistas básicas y preferir una solución de superposición pura .
El PopupWindow es exactamente lo que necesita:
Una ventana emergente que se puede utilizar para mostrar una vista arbitraria.
Dado que el PopupWindow
actúa en el nivel de Activity
, debe superponerse a todo en su Activity
actual .
La ventana emergente es un contenedor flotante que aparece encima de la actividad actual.
Aquí puede encontrar un ejemplo sencillo.
Finalmente eliminé la tabBar y la reemplazé con simples botones para cambiar entre las pestañas y colocarlo antes de CustomLayout en xml para dibujar antes de él.
<LinearLayout .... // tabs layout /> <CustomLayout .... />
Esto ocurre debido al orden jerárquico del diseño de su actividad. Tu ActionBar
se está dibujando sobre tu vista. Puedes encontrar el marco de tu actividad y añadir la vista allí.
private void addCircleView() { final FrameLayout frameLayoutRoot = (FrameLayout) getActivity().getWindow() .getDecorView().findViewById(android.R.id.content); View circleView = inflater.inflate( R.layout.my_circle_view, frameLayoutRoot, false); ViewGroup.MarginLayoutParams marginLayoutParams = ((ViewGroup.MarginLayoutParams) circleView.getLayoutParams()); marginLayoutParams.topMargin = getStatusBarHeight(getActivity()) + getActivity().getActionBar().getHeight() + getResources().getDimensionPixelSize(R.dimen.your_margin_top_circle); circleView.setLayoutParams(marginLayoutParams); frameLayoutRoot.addView(circleView); } public int getStatusBarHeight(Context context) { int result = 0; final int resourceId = context.getResources().getIdentifier( "status_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; }
También recuerda quitar la vista cuando navegas lejos a otro fragmento.
frameLayoutRoot.removeView(circleView);
Editar:
Tenga en cuenta que esto es algo que debe hacer en el nivel que añade ActionBar
, que es la actividad. En ese caso, no necesitaría estas soluciones. Estas cosas son mucho más fáciles de lograr con ToolBar
.
- ListView superpone otro diseño al desplazarse
- Cómo pasar valores de matriz desde y hacia RenderScript de Android mediante Asignaciones