example custom android popupwindow

android - custom - ¿Cómo mostrar PopupWindow en un lugar especial?



show popup android (3)

Necesito mostrar PopupWindow en una Views muestra en la pantalla.

¿Cómo puedo calcular las coordenadas de View necesaria y colocar PopupWindow debajo de él? Código de ejemplo son más que bienvenidos. Gracias.


Localizar una vista que ya se muestra es bastante fácil: esto es lo que uso en mi código:

public static Rect locateView(View v) { int[] loc_int = new int[2]; if (v == null) return null; try { v.getLocationOnScreen(loc_int); } catch (NullPointerException npe) { //Happens when the view doesn''t exist on screen anymore. return null; } Rect location = new Rect(); location.left = loc_int[0]; location.top = loc_int[1]; location.right = location.left + v.getWidth(); location.bottom = location.top + v.getHeight(); return location; }

Luego puede usar un código similar al que Ernesta sugirió para pegar la ventana emergente en la ubicación correspondiente:

popup.showAtLocation(parent, Gravity.TOP|Gravity.LEFT, location.left, location.bottom);

Esto mostraría la ventana emergente directamente debajo de la vista original, aunque no hay garantía de que haya suficiente espacio para mostrar la vista.


Para obtener el tamaño de la pantalla principal de la aplicación sin elementos como el título y las barras de notificación, anule el siguiente método en la clase que genera la pantalla en cuestión (los tamaños se miden en píxeles):

@Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); }

Para obtener la coordenada inferior de la vista en la que desea mostrar la ventana emergente:

View upperView = ... int coordinate = upperView.getBottom();

Ahora, siempre que la height - coordinate sea ​​lo suficientemente grande para su vista emergente, simplemente puede colocar la ventana emergente de esta manera:

PopupWindow popup = new PopupWindow(); Button button = new Button(this); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { popup.showAtLocation(parent, Gravity.CENTER, 0, coordinate); } });

Aquí, showAtLocation() toma la vista principal como un argumento junto con las compensaciones de gravedad y ubicación.


tiene getLeft() y getBottom() para obtener la posición exacta de la vista en el diseño. También tiene getWidth() y getHeight() para saber el espacio exacto que ocupa la vista. Si desea colocar su ventana emergente debajo de una vista.

setLeft() métodos de la vista setLeft() y setTop() para colocar la nueva ventana emergente.