¿Existe un ejemplo sencillo de la clase PopupWindow con Android v2.0?

Resuelto Todd asked hace 54 años • 3 respuestas

Busqué en línea y no pude encontrar un ejemplo funcional de la clase PopupWindow. Los ejemplos de código que encontré en línea se compilan pero no funcionan, o utilizan métodos que ya se han eliminado (como Activity.getViewInflate()).

¿Existe un ejemplo funcional sencillo que muestre una ventana emergente?

Todd avatar Jan 01 '70 08:01 Todd
Aceptado

Creé un ejemplo funcional basado en esta publicación de Grupos de Google.

Para crear una ventana emergente que funcione de forma sencilla, deberá hacer lo siguiente:

  1. Cree un XML de diseño que describa la vista que se representará dentro de la ventana emergente.
  2. Invoque PopupWindow inflando el XML de diseño y asigne la "vista principal" adecuada a la ventana emergente.

popup_example.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="Test Pop-Up"
    />

</LinearLayout>

código Java:

    LayoutInflater inflater = (LayoutInflater)
       this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    PopupWindow pw = new PopupWindow(
       inflater.inflate(R.layout.popup_example, null, false), 
       100, 
       100, 
       true);
    // The code below assumes that the root container has an id called 'main'
    pw.showAtLocation(this.findViewById(R.id.main), Gravity.CENTER, 0, 0); 
Todd avatar Dec 28 '2009 03:12 Todd

AFAIK, solo funciona AbsoluteLayout (confírmelo), como se ve en http://sree.cc/google/android/android-popup-window . Mostré la ventana emergente correctamente, pero LinearLayout no mostraba todos los elementos. ¡Pero AbsoluteLayout está en desuso!

FrameLayout también funciona , pero organizar vistas es una pesadilla ya que la documentación oficial dice que solo sirve para mantener una vista.

Además, para poder recibir eventos táctiles , debe hacer esto: setBackgroundDrawable(new BitmapDrawable());

como se explica con más detalle en el cierre de la ventana emergente de Android

Ravindranath Akila avatar Aug 27 '2011 03:08 Ravindranath Akila