example - popupwindow android studio
Android-PopupWindow sobre una vista especĂfica (7)
El que quieres usar es showAtLocation(...)
. Usted especifica la vista de anclaje (en la que el usuario hace clic), y la coloca en relación con eso a través del parámetro de gravity
y las compensaciones. Pensar en el parámetro de gravity
como el PopupWindow
es casi como una vista secundaria y la vista principal es como un diseño de contenedor.
Deberías poder poner Gravity.LEFT | Gravity.TOP
Gravity.LEFT | Gravity.TOP
como el parámetro.
Estoy desarrollando una aplicación para Android y estoy usando una ventana emergente cuando el usuario hace clic en un objeto específico de la barra de menú (que consiste en pequeñas imágenes alineadas horizontalmente) en la parte inferior de la pantalla.
En el clic quiero que la ventana emergente se ancle a la esquina superior izquierda de la vista en la que se hizo clic y se muestre en la parte superior.
Los únicos métodos que parecen ser relevantes son showAsDropDown (View anchor, int xoff, int yoff) y showAtLocation (View parent, int gravity, int x, int y) . El problema con showAsDropDown es que está anclado a la esquina inferior izquierda de la vista.
¿Hay otra manera de implementar esto?
Solo necesitaba mover la ventana emergente por la altura de su ancla utilizando el parámetro yoff en la sintaxis showAsDropDown (View anchor, int xoff, int yoff) .
popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight);
Además, tenga en cuenta que si la altura máxima permitida para anclar no permite la transformación, es posible que la ventana emergente no se muestre correctamente.
Tengo este código: PopupWindow debajo de una vista específica (Gravity End) para todas las versiones de sdk.
// display the popup[![enter image description here][1]][1]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END);
} else {
mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0);
}
Aquí la vista v es el calendario de ImageButton.
popupwindow.showAsDropDown (anchor, 0, -125); esto me funciona
puede mostrar la ventana emergente siempre por encima del ancla siguiendo
popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()-popupView.getHeight);
popupWindow.showAtLocation(...)
realidad muestra la ventana absolutamente posicionada en la pantalla (ni siquiera la aplicación). El ancla en esa llamada solo se usa para su token de ventana. Las coordenadas son compensaciones de la gravedad dada.
Lo que realmente quieres usar es:
popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity);
Esta llamada solo está disponible en API 19+, por lo que en versiones anteriores debe usar:
popupWindow.showAsDropdown(anchor, offsetX, offsetY);
Estas llamadas muestran la ventana emergente relativa a la vista de anclaje especificada. Tenga en cuenta que la gravedad predeterminada (cuando se llama sin gravedad específica) es Gravity.TOP|Gravity.START
por lo que si está utilizando Gravity.LEFT
explícitamente en varios puntos de su aplicación, tendrá un mal momento :)
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight());