51

我在网上查看并找不到 PopupWindow 类的工作示例。我在网上找到的代码示例要么编译但不起作用,要么正在使用已被删除的方法(例如Activity.getViewInflate()).

是否有显示 PopupWindow的简单工作示例?

4

3 回答 3

78

我基于此 Google Groups 帖子创建了一个工作示例。

要创建一个简单的工作 PopupWindow,您需要执行以下操作:

  1. 创建一个布局 XML,用于描述将在 PopupWindow 中呈现的视图。
  2. 通过扩展布局 XML 来调用 PopupWindow,并将适当的“父视图”分配给弹出窗口。

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>

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); 
于 2009-12-28T03:53:03.243 回答
4

AFAIK 只有AbsoluteLayout 有效(请确认),如http://sree.cc/google/android/android-popup-window所示。我已经正确显示了弹出窗口,但 LinearLayout 没有显示所有元素。但是 AbsoluteLayout 已被弃用!

FrameLayout 也可以,但是组织视图是一场噩梦,因为官方文档说它只适用于保持一个视图。

此外,为了能够接收触摸事件,您需要这样做: setBackgroundDrawable(new BitmapDrawable());

如Android弹出窗口解除中进一步解释的那样

于 2011-08-27T03:03:34.447 回答
-1

你得到了隐形,因为你没有设置你被膨胀的布局的背景颜色。将它设置为 android:background="#778899",你肯定可以看到这些东西

于 2011-12-12T14:17:42.947 回答